【Python】PDFをOpenCVで画像処理するための手順まとめ

OpenCV
スポンサーリンク
ピーター
ピーター

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の画像処理をしたい場合は、以下の流れで処理が必要です。

  1. PDFを画像ファイルに変換する
  2. 画像ファイルをOpenCV型に変換する
ピーター
ピーター

PDFからOpenCV型への変換は2段階の処理が必要でした。。。

PDF→PIL型→OpenCV型に変換するサンプルコード

from pathlib import Path
from pdf2image import convert_from_path
import cv2
import numpy as np

input_pdf_path = Path('input/mf_syotoku_2020.pdf')
image_dir = Path('out_image')
out_format = 'png'

### PIL型 => OpenCV型 の変換関数
def pil2opencv(in_image):
    out_image = np.array(in_image, dtype=np.uint8)

    if 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 = input_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による画像処理が可能なります。

ファイル保存が必要になるため、限定された環境の場合注意が必要ですね

その他の参考記事について

pdf2imageの使い方について

PDFにパスワードがかかっている場合の対処法

PDFデータでパスワードが掛かっている場合や解除したい場合があります。その場合は、こちらの記事を参考にしてください

メモリエラーが発生した場合

pdf2imageでメモリエラーが発生した場合、この記事を参考にしてください!

OpenCVで使える画像処理を知りたい方へ

詳解 OpenCV 3 ―コンピュータビジョンライブラリを使った画像処理・認識

紹介しているサンプルはC++になりますが、OpenCVで対応している画像処理やパターン認識、トラッキング、機械学習と基礎から応用まで幅広く解説されています。

サンプルコードや関数のリファレンスに関しても紹介しているのがいいですね!

そのため、どのようなパラメータにするといいのか、やりたいことに適した処理は何かを調べるのにとても重宝しています!Pythonのコードもある程度理解している方で、C++のサンプルコードでも苦にしない方は買っていい一冊です!

ただし、C++とPythonのAPIが異なるため、関数を調べたりする作業が発生するので、そこは許してください。。。

コメント

ランキング

タイトルとURLをコピーしました