【Python/OpenCV】積分画像を求めてみる

この記事では、Python版OpenCVで積分画像を求める方法をソースコード付きで解説します。

積分画像

積分画像(Integral Image)は、注目画素とその左と上にある全ての画素値の和を求めた物です。
【詳細】積分画像の原理・計算式・高速化

今回は、Python言語とOpenCVの「cv2.integral」を用いて積分画像を求めてみました。

書式

dst = cv2.integral(gray)
パラメータ名 説明
src 入力画像(グレースケール)
kernel フィルタのカーネルサイズ(3なら8近傍)
dst 積分画像(入力画像より幅・高さが1px大きい)

ソースコード(Python3+OpenCV3)

サンプルプログラムのソースコードです。

#-*- coding:utf-8 -*-
import cv2
import numpy as np


def main():
    # 入力画像を読み込み
    img = cv2.imread("input.jpg")
    
    # グレースケール変換
    gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

    # 画素値を表示
    print("gray=\n", gray)

    # 積分画像の作成
    integral = cv2.integral(gray)

    # 画素値を表示
    print("integral=\n", integral)


if __name__ == "__main__":
    main()

※動作には、OpenCVライブラリのインストールが必要です。

実行結果

サンプルプログラムの実行結果です。

■入力画像

■出力結果

gray=
 [[  0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0]
 [  0   0   0 255 255 255 255 255   0   0]
 [  0   0   0 255 255 255 255 255   0   0]
 [  0   0   0 255 255 255 255 255   0   0]
 [  0   0   0 255 255 255 255 255   0   0]
 [  0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0]]

integral=
 [[   0    0    0    0    0    0    0    0    0    0    0]
 [   0    0    0    0    0    0    0    0    0    0    0]
 [   0    0    0    0    0    0    0    0    0    0    0]
 [   0    0    0    0    0    0    0    0    0    0    0]
 [   0    0    0    0  255  510  765 1020 1275 1275 1275]
 [   0    0    0    0  510 1020 1530 2040 2550 2550 2550]
 [   0    0    0    0  765 1530 2295 3060 3825 3825 3825]
 [   0    0    0    0 1020 2040 3060 4080 5100 5100 5100]
 [   0    0    0    0 1020 2040 3060 4080 5100 5100 5100]
 [   0    0    0    0 1020 2040 3060 4080 5100 5100 5100]
 [   0    0    0    0 1020 2040 3060 4080 5100 5100 5100]]

【おすすめ記事】
PythonでOpenCV入門 サンプル集
【Python】画像処理プログラミング入門
【画像処理入門】アルゴリズム&プログラミング

シェア&フォローお願いします!