【Python/OpenCV】積分画像を用いた処理の高速化

Python版OpenCVで積分画像を作成する方法をソースコード付きで解説します。

積分画像とは

積分画像(Integral Image)は、注目画素とその左と上にある全ての画素値の和を求めた物です。
詳細は以下ページで解説しています。

積分画像の原理・計算式・高速化
この記事では、積分画像の基本原理や計算式・特徴・例題についてまとめました。

Python言語版OpenCVでは、「cv2.integral」を用いて簡単に積分画像を求めることができます。

サンプルコード① 積分画像の作成


コード解説

dst = cv2.integral(src)
  • srcは入力画像
  • dstは積分画像(入力画像より幅・高さが1px大きい)
【Python/OpenCV】積分画像を用いた処理の高速化
Python版OpenCVで積分画像を作成する方法をソースコード付きで解説します。

積分画像を用いると、例えば2重forループで平均値フィルタの処理を書いた場合に高速化できます。
今回は、積分画像を用いた場合にどれだけ高速化されるか平均値フィルタを例に比較します。
なお、平均値フィルタの原理は以下ページで別途解説しています。

【Python/OpenCV】平均値フィルタで画像を平滑化する方法(cv2.Blur)
Python版OpenCVで平均値フィルタを実装し、画像を平滑化する方法をソースコード付きで解説します。

サンプルコード① 平均値フィルタ(積分画像なし)

積分画像を用いずに、平均値フィルタ処理を掛けた場合のサンプルコードです。
実行したときの処理時間は8.11秒でした。


■入力画像(左)と出力画像(右)

サンプルコード② 平均値フィルタ(積分画像あり)

積分画像を用いて、平均値フィルタ処理を掛けた場合のサンプルコードです。
実行したときの処理時間は約1.46秒でした。積分画像を用いない場合と比較して処理速度が約6倍に向上しました。


■入力画像(左)と出力画像(右)

サンプルコード③ cv2.blurを用いた場合

cv2.blurを用いて、、平均値フィルタ処理を掛けた場合のサンプルコードです。


■入力画像(左)と出力画像(右)

実行したときの処理時間は約2.89ミリ秒と圧倒的な速さです。Python版OpenCVで用意されている関数やメソッドは、内部の処理がC++で記述されており、Pythonからはそれを呼び出びだしているため、非常に高速です。

関連ページ

【PythonとOpenCVで画像処理超入門】使い方とサンプルコードを解説
Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。
この記事を書いた人
西住技研

Python使用歴10年以上。研究、仕事、趣味でデータ分析や作業自動化などに活用してきたノウハウを情報発信しています。
詳しいプロフィールやお問合せはこちらのページまで。
YoutubeX(旧Twitter)でも情報発信中です!

西住技研をフォローする
OpenCV

コメント