■フォルダ内のPDFを画像に変換
出典:
必要ライブラリ pdf2image
インストール方法
pip install pdf2image
必要ツール PDFコマンドラインツールPoppler
1:popplerフォルダをこれから作成するプログラム(pyファイル)と同じ階層に作成し、popplerフォルダ内に解凍したファイル内にある、bin, include, lib, shareのフォルダをコピーしてください。
2:Popplerを使うための最後の仕上げとして、Popplerへの環境変数PATHを一時的に付与するコードをpyファイルに記述する必要があります。
# popplerへの環境変数PATHを一時的に付与
poppler_dir = Path(sys.argv[0]).parent.absolute() / "poppler/bin"
os.environ["PATH"] += os.pathsep + str(poppler_dir)
上記コードはPDFの画像変換をする以前に記述する必要があります。
3:PDFの画像変換(convert_from_path()関数)
pdf2imageのconvert_from_path()関数を使用し、PDFを画像ファイルへ変換します。
パラメータ(引数)にはPDFファイルのパスや解像度(単位:dpi)、ページを指定します。
convert_from_path(パス,解像度,ページ)
解像度は指定しないと200dpiとなります。高くすればより高画質となりますが、その分変換に時間がかかります。私がPDFプレニュー機能で使うときは、100dpiで設定しています。
convert_from_path()関数で作成される画像はPillowライブラリのImage型なのでsave()メソッドを呼び出して保存します。
パラメータには保存先のファイル名、画像形式(”JPEG”,”PNG”等)を指定します。
convert_from_path()関数とsave()メソッドは下記のように使用します。
実行ファイルと同じ階層にあるtest.pdfのパスをpathに格納。convert_from_path関数に対象PDFのパスが格納されたpathと解像度200、対象ページ(最初の1ページ目)を渡しpagesに格納。最後に実行ファイルと同じ階層にimage.pngとして変換した画像を保存、という一連の流れとなっています。
### PDFをpng画像に変更する ###
path = Path(sys.argv[0]).parent.absolute() / "test.pdf"
pages = convert_from_path(Path(path),200, last_page=1)
pages[0].save(Path(sys.argv[0]).parent.absolute() / "image.png", "png")
■画像ファイルをpythonから表示
出典:
手順
1 globでフォルダ内のjpgファイル名を取得しリスト化
2 リストの配列数分for inでループ
3 ファイル名を取得
4 画像をnumpyでバイナリで開く
5 取り込んだバイナリをopencv形式に変更
6 opencv形式の画像をグレースケール化
#Souce code -------------------------------------------
#1 import libraries
import pathlib
import cv2
import numpy as np
#1 globでフォルダ内のjpgファイル名を取得しリスト化
input_dir = "images/input"
input_list = list(pathlib.Path(input_dir).glob('**/*.jpg'))
#2 リストの配列数分for inでループ
for i in range(len(input_list)):
#3 ファイル名を取得
img_file_name = str(input_list[i])
#4 画像をnumpyでバイナリで開く
img_np = np.fromfile(img_file_name, dtype=np.uint8)
#5 取り込んだバイナリをopencv形式に変更
img = cv2.imdecode(img_np, cv2.IMREAD_COLOR)
#6 opencv形式の画像をグレースケール化
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print("-------------------------------------------")
print(img_file_name)