Python3 OpenCV3で背景差分を求める

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

ある道を定点カメラで撮影している時に人がうつりこんできたら、その前の背景の差分を求めて人を抽出するような処理。

[amazonjs asin=”4061538225″ locale=”JP” title=”OpenCVによる画像処理入門 (KS情報科学専門書)”]

 

前提

ディレクトリ構成などはこことかこことか。

 

元画像

ダンボーの画像(dambo.jpg, dambo2.jpg) をsource/imageディレクトリに設置する。

dambo1

 

dambo2

 

背景差分

背景差分をを求める。
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]

スクリーンショット 2015-07-15 0.15.22

 

あまり綺麗に取得できなかった。
カメラで撮影したため、影などが入ったからかもしれない。

 

Related posts

2 Thoughts to “Python3 OpenCV3で背景差分を求める”

  1. […] つまり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/ […]

コメントを残す