ZirAjs
ZirAjs' blog
ZirAjs
전체 방문자
오늘
어제
  • 분류 전체보기
    • 고딩 공부
      • 물리학Ⅰ
      • 자작 문제집
      • 자작 문제집 정오표
    • 개발
      • [C#] WPF
      • [C#] Unity
      • [Python]
      • [C++] QT
      • [Java|Kotlin] minecraft plu..
    • Books

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 완성된 프로그램 목록

인기 글

태그

  • 멀티엔딩
  • 쯔꾸르
  • RPG
  • c#
  • 문제 자르기
  • WPF
  • 문제 추출
  • 학력평가
  • 수능
  • 수특변형
  • 대화구현
  • Isometric
  • 2.5
  • Unity
  • 헌법의 기초
  • 자리배치
  • iCon
  • 양자 컴퓨터 원리와 수학적 기초
  • 모의고사
  • 분기
  • 물리1
  • QT
  • 분기점
  • 대화

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ZirAjs

ZirAjs' blog

개발/[Python]

희미한 pdf 뚜렷하게 하기

2023. 1. 16. 00:08

 

더보기
import pdf2image
import PIL.Image
import numpy as np
import cv2

path = r"파일 경로"
# 예시: path = "./test.pdf"
pages = pdf2image.convert_from_path(path, dpi=300)
result = []
for page in pages:
    opencvImage = cv2.cvtColor(np.array(page), cv2.COLOR_RGB2BGR)
    gray_image = cv2.cvtColor(opencvImage, cv2.COLOR_BGR2GRAY)
    (thresh, BnW_image) = cv2.threshold(gray_image, 210, 255, cv2.THRESH_BINARY)
    # 여기서 임곗값(210)을 기준으로 검게/희게 채색하는 원리
    cv2.imwrite('result.png', BnW_image)
    color_converted = cv2.cvtColor(BnW_image, cv2.COLOR_BGR2RGB)
    pil_image = PIL.Image.fromarray(color_converted)
    result.append(pil_image)

result[0].save(
    "output.pdf", "PDF", resolution=100.0, save_all=True, append_images=result[1:]
)

필요해서 간단히 만들었습니다. 필기를 스캔했는데, 희미해서 잘 안보이더라고요. 그래서 필기만 검은색으로 나올 수 있게 하는 프로그램을 만들었습니다.

 

== 2023-02-02 수정 버전

import pdf2image
import PIL.Image
import numpy as np
import cv2
import argparse

def convert(file_path: str, save_path: str, threshold: int, dpi=350):
    pages = pdf2image.convert_from_path(file_path)
    result = []
    for page in pages:
        opencvImage = cv2.cvtColor(np.array(page), cv2.COLOR_RGB2BGR)
        gray_image = cv2.cvtColor(opencvImage, cv2.COLOR_BGR2GRAY)
        # Convert a grayscale image to black and white using binary thresholding
        (thresh, BnW_image) = cv2.threshold(
            gray_image, threshold, 255, cv2.THRESH_BINARY)
        color_converted = cv2.cvtColor(BnW_image, cv2.COLOR_BGR2RGB)
        pil_image = PIL.Image.fromarray(color_converted)
        result.append(pil_image)

    result[0].save(
        save_path, "PDF", resolution=100.0, save_all=True, append_images=result[1:]
    )


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('--file_path', '-p', type=str, required=True, help='pdf 경로')
    parser.add_argument('--threshold', '-t', type=int, required=False,
                        default=200, help='보정 임계값 기본값은 200')
    parser.add_argument('--save_path', '-s', required=False, default="",
                        help='pdf 저장 경로. 지정하지 않을시 원본 파일 이름 + " - 보정.pdf"형식으로 저장됨.')
    args = parser.parse_args()

    file_path: str = args.file_path
    threshold: int = args.threshold
    if args.save_path == "":
        save_path = file_path.rstrip(".pdf") + " - 보정.pdf"
    else:
        save_path = args.save_path
    convert(file_path, save_path, threshold)
저작자표시 (새창열림)
    ZirAjs
    ZirAjs
    ZirAjs의 블로그입니다. 과학, 수학, 개발에 관심이 있습니다

    티스토리툴바