2012-07-15 6 views
8

私は顔のイメージを持っており、口、鼻、および各目の位置(x、y、幅、高さ)を検出するためにハースカスケードを使用しています。これらの領域の外側にあるすべてのピクセルをゼロに設定したいと思います。これを行う最も高速な(計算上)方法は何でしょうか?私は最終的にビデオフレームにリアルタイムでそれをやっています。OpenCV via python:四角形の外側のピクセルをゼロにする方法はありますか?

答えて

13

私はそれが最速の方法かどうかわかりませんが、それを行う方法です。

顔の領域を白にしてマスク画像を作成し、bitwise_and関数に元の画像とマスク画像を適用します。

x = y = 30 
w = h = 100 

mask = np.zeros(img.shape[:2],np.uint8) 
mask[y:y+h,x:x+w] = 255 
res = cv2.bitwise_and(img,img,mask = mask) 

それはサイズ400×300

EDITのイメージのために私のシステム(コアi5,4GB RAM)に0.16 msを取る - BETTER METHOD:あなたは、上記のように行う必要はありません。単純にゼロ画像を作成し、原画像からゼロ画像にROIをコピーするだけです。それで全部です。

mask = np.zeros(img.shape,np.uint8) 
mask[y:y+h,x:x+w] = img[y:y+h,x:x+w] 

それは上記のパラメータ、上記以外5 times fasterのために私のシステムでのみ0.032 msをとります。

結果:

入力画像:

enter image description here

出力:

enter image description here

関連する問題