###前提・実現したいこと
最近、趣味でプログラミングを始めました。
PythonとOpenCVを用いて何も映っていない背景と物体を映した前景で差分をとり、物体だけを白色で抽出したいです。
###発生している問題
しかし、背景や物体の色によって物体の色が黒になってしまうことがあり、うまくいきません。
Python
1diff = cv2.absdiff(pic,gray)
この命令でうまく物体だけを抽出できるかなと思い、使ってみたのですが、2値化するときの閾値によって色が変化してしまい、黒くなってしまうことが多々あります。
<<画像>>
これは手のみで、色のおかげか白で抽出できています。
服の白い部分の一部と影になっている部分が黒くなっているのがわかると思います。
###該当のソースコード
Python
1#coding:utf-8 2 3import os.path 4import numpy as np 5import cv2 6 7cam = cv2.VideoCapture(0) 8cam.set(3, 960) #width 9cam.set(4, 540) #heigh 10cam.set(5,25) #fps 11 12while True: 13 ret2,image = cam.read() 14 15 Key = cv2.waitKey(10) 16 if Key == 32: #space 17 cv2.imwrite("base.png",image) 18 19 if os.path.isfile("base.png"): 20 pic = cv2.imread('base.png',cv2.IMREAD_GRAYSCALE) #読み込み 21 gray = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY) #現在 22 diff = cv2.absdiff(pic,gray) #比較画像生成 23 diff2 = cv2.medianBlur(diff,ksize=3) #ブラー 24 twoc = cv2.threshold(diff2,40,255,cv2.THRESH_BINARY)[1] #2値化 25 cv2.imshow("base",diff) 26 cv2.imshow("image",diff2) 27 cv2.imshow("result",twoc) 28 else: 29 cv2.imwrite("base.png",image) 30 31 if Key == 27: #Esc 32 break 33cv2.destroyAllWindows() 34
###質問項目
0. この方法、考え方で目的は達成できるのか
- もっと効率的だったり、簡単な方法はないのか
- その他、このプログラムにおかしいところはないか
最近始めたばかりで、おかしなところが多くあると思いますが、回答よろしくお願い致します。
###補足情報(言語/FW/ツール等のバージョンなど)
Raspberry Pi 3
Python 2.7.9
OpenCV 3.1.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/09 14:18