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]
あまり綺麗に取得できなかった。
カメラで撮影したため、影などが入ったからかもしれない。
ディスカッション
ピンバック & トラックバック一覧
[…] つまりfirstframeの画像と比較対象frameの差分が抽出された画像ができる。背景差分について:https://www.blog.umentu.work/python3-opencv3%E3%81%A7%E8%83%8C%E6%99%AF%E5%B7%AE%E5%88%86%E3%82%92%E6%B1%82%E3%82%81%E3%82%8B/ […]
[…] Python3 OpenCV3で背景差分を求める […]