Python3 OpenCV3で背景差分を求める

ある道を定点カメラで撮影している時に人がうつりこんできたら、その前の背景の差分を求めて人を抽出するような処理。 [amazonjs asin=”4061538225″ locale=”JP” title=”OpenCVによる画像処理入門 (KS情報科学専門書)”]   前提 ディレクトリ構成などはこことかこことか。   元画像 ダンボーの画像(dambo.jpg, dambo2.jpg) をsource/imageディレクトリに設置する。     背景差分 背景差分をを求める。 sourceディレクトリにbackground_substraction.pyを作成する。 [python title=”background_substraction.pyの内容”] # -*- coding: UTF-8 -*- import cv2 import math import numpy as np import os if __name__ == ‘__main__’: # 画像の読み込み img_src1 = cv2.imread("./image/dambo1.jpg", 1) img_src2 = cv2.imread("./image/dambo2.jpg", 1) # 背景画像との差分を算出 img_diff = cv2.absdiff(img_src2, img_src1) # 差分を二値化 img_diffm = cv2.threshold(img_diff, 20, 255, cv2.THRESH_BINARY)[1] # 膨張処理、収縮処理を施してマスク画像を生成 operator = np.ones((3, 3), np.uint8) img_dilate = cv2.dilate(img_diffm, operator, iterations=4) img_mask = cv2.erode(img_dilate, operator, iterations=4) # マスク画像を使って対象を切り出す img_dst = cv2.bitwise_and(img_src2, img_mask) # 表示 cv2.imshow("Show BACKGROUND SUBSTRACTION Image", img_dst) cv2.waitKey(0) cv2.destroyAllWindows() [/python] 実行。 [shell] (opencv_python)$ python background_substraction.py [/shell]   あまり綺麗に取得できなかった。 カメラで撮影したため、影などが入ったからかもしれない。