더보기
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)