
PythonでPDFを画像ファイルに変換したい!
今回はPythonでPDFを画像ファイル(PNG/JPEG)に変換し、OpenCVで画像処理をするための手順について、備忘録として記載します。
環境設定/インストール
pdf2image/popplerのインストール
pipでインストールしている場合のコマンド
pip install pdf2image
pip install poppler
OpenCVのインストール
途中のコマンドは省略しますが、OpenCVを使えるようになるコマンドは以下の通りです。
$ bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
$ brew install python
$ brew install opencv
$ pip install opencv-python
macになりますが、その詳細な環境構築方法について紹介しています。
PDFファイルをOpenCVで画像処理するまでの手順
大雑把にPDF ファイルにOpenCVの画像処理をしたい場合は、以下の流れで処理が必要です。
- PDFを画像ファイルに変換する
- 画像ファイルをOpenCV型に変換する

PDFからOpenCV型への変換は2段階の処理が必要でした。。。
PDF→PIL型→OpenCV型に変換するサンプルコード
from pathlib import Path
from pdf2image import convert_from_path
import cv2
import numpy as np
out_format = 'png'
### PIL型 => OpenCV型 の変換関数
def pil2opencv(in_image):
out_image = np.array(in_image, dtype=np.uint8)
if out_image.ndim == 2:
pass
elif out_image.shape[2] == 3:
out_image = cv2.cvtColor(out_image, cv2.COLOR_RGB2BGR)
return out_image
### PDF => OpenCV型 の変換関数
def pdf2opencv(in_pdf_path, out_format = "png"):
opencv_images = []
### PDF => PIL
images = convert_from_path(pdf_path = in_pdf_path, dpi = 300, fmt = out_format)
for image in images:
### PIL型 => OpenCV型
opencv_images.append(pil2opencv(image))
return opencv_images
opencv_images = pdf2opencv('input/test,pdf')
OpenCVへの変換方法の参考記事
PDFで変換した画像に、OpenCVの画像処理を利用したい場合、こちらの記事を参考にしてください!
画像ファイルで一旦出力してやりとりする場合
以下の記事を参考に、PDFを画像ファイルに出力してください。その後にOpenCVを使って画像を開くことでOpenCVによる画像処理が可能なります。
ファイル保存が必要になるため、限定された環境の場合注意が必要ですね
OpenCVで画像処理をする例について
OpenCV(numpy)で取得した画像に対して、台形補正をする場合の処理について記載しました。画像処理の一例としてよかったら参考にしてください!
その他の参考記事について
PDFから変換した画像にOCR(文字認識)する方法
PDFを画像に変換したら、色々画像処理でも遊んでみたくなりますが、OCRをすることもできます。環境も簡単に作れるEasyOCRの使い方を紹介しています。
pdf2imageの使い方について
PDFにパスワードがかかっている場合の対処法
PDFデータでパスワードが掛かっている場合や解除したい場合があります。その場合は、こちらの記事を参考にしてください
メモリエラーが発生した場合
pdf2imageでメモリエラーが発生した場合、この記事を参考にしてください!
OpenCVで使える画像処理を知りたい方へ
詳解 OpenCV 3 ―コンピュータビジョンライブラリを使った画像処理・認識
紹介しているサンプルはC++になりますが、OpenCVで対応している画像処理やパターン認識、トラッキング、機械学習と基礎から応用まで幅広く解説されています。
サンプルコードや関数のリファレンスに関しても紹介しているのがいいですね!
そのため、どのようなパラメータにするといいのか、やりたいことに適した処理は何かを調べるのにとても重宝しています!Pythonのコードもある程度理解している方で、C++のサンプルコードでも苦にしない方は買っていい一冊です!
ただし、C++とPythonのAPIが異なるため、関数を調べたりする作業が発生するので、そこは許してください。。。
コメント