LoginSignup
10
7

More than 1 year has passed since last update.

【Python】画像処理OpenCVとPillow(PIL)を比べてみた

Last updated at Posted at 2022-07-08

はじめに

画像処理で速度を必要とするアプリケーションを作っているところ、前処理でアプリに組み込まないスクリプトをPythonで組んだ時の話です。
標準ライブラリを使えばpipで新しいライブラリをインストールする必要がないから楽なんだよな。。
どのくらいに性能差があるのだろうか
ということで速度検証してみました。

速度検証

速度検証対象

  • OpenCV:4.6.0.66
  • Pillow:9.1.1

画像の左右上下が分かりやすく、速度差を出すため容量も高いものを選びました。
使用した画像は以下のPixabayのCDD20さんの画像を使わせて頂きました。
test.png

速度検証結果

実際に実行してみた結果をまとめてみました。

実行項目 OpenCV Pillow
読み込み 0.1060 0.0075
回転(時計回り) 0.0273 0.1271
回転(反時計回り) 0.0230 0.0395
回転(180度回転) 0.0164 0.0324
縦連結 0.0190 0.0527
横連結 0.0343 0.0594
リサイズ 0.015 0.0767

考察

まず知っておいてほしいことが以下のライブラリの位置付けで実際には得意分野があったりします。
おいおい、それなら比べる必要ないだろと思う人!!案外、予想外の結果も出るものなので気になったら検証をすべきだと私は思います。

  • Pillow(PIL): 画像処理ライブラリ
  • OpenCV: コンピュータビジョンライブラリ

以上のことからPillowは純粋に画像を操作することに長けるのですが、逆にOpenCVは画像認識等のAIを使う上で分析しやすいようにndarray形式になっており、コンピュータビジョン系に向いています。

  1. 読み込み
    情報量が多い OpenCV がどうしても読み込み速度になると遅くなるようです。
    逆に PIL は画像処理ができる情報のみでいいので速度は雲泥の差です。

  2. 回転
    ndarray形式で持っているOpenCVは単純に数値変換で済むのでやはり「OpenCV > PIL」という結果になりました。それを踏まえても時計回りがやけに時間がかかていることが気になりますね。。

  3. 連結
    やはり、こちらにおいても結果は「OpenCV > PIL」になりました。縦結合においては2倍以上のスコアを出しています。

  4. リサイズ
    これは、雲泥の差ですね。OpenCVが4枚終わってもPILは1枚も終わっていないので、OpenCVで1時間かかる作業を5時間近くかけてやるとなると大量のデータにこの処理を行うときは考え物ですね。

まとめ

今回は簡単な画像処理と速度のみに注目してしまいましたが、画像処理のできることにおいては完全にPIL勝ちです。ですが、OpenCVは読み込み速度の遅さがネックでした。ほかの速度を帳消しにしそうな勢いだったので純粋にOpenCVの方が速いとも言いずらい結果になりました。
いかがだったでしょうか。こういう検証も意外な結果が出たりして面白いとは思いませんか?
では、また次回に。。

10
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7