2016-12-29 2 views
1

白い紙を背景にした写真があり、ノイズ(黄色の点)を取り除き、ピクセルの値(bgr)を取得する必要があります。葉。オブジェクトを検出して平均ピクセル値(BGR)を取得する

私は葉を検出するために緑の閾値を使用し、元の画像でマスクしました。私はピクセル値を取得するためにcv2.meanを使用しましたが、黒の領域/背景を含むすべてのピクセルを数えます。

リーフのピクセル値を取得するにはどうすればよいですか?だから、基本的には葉と黒の背景とマスクされたイメージを持っている

import cv2 
import numpy as np 

img=cv2.imread('crop21.jpg') 
blur=cv2.GaussianBlur(img,(5,5),0) 
hsv=cv2.cvtColor(blur,cv2.COLOR_BGR2HSV) 
#threshold green 
low_g=np.array([35,100,60],np.uint8) 
up_g=np.array([85,255,190],np.uint8) 
mask=cv2.inRange(hsv,low_g,up_g) 
mask_upstate=cv2.bitwise_and(blur, blur, mask=mask) 
#get the bgr value 
mean=cv2.mean(mask_upstate) 
print (mean) 

cv2.imshow('image',mask_upstate) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

答えて

0

: は、ここで私が使用したコードです。問題は今、葉を持つピクセルの量で分割するのではなく、色の合計をすべてのピクセルの量で割ることです。したがって、あなたは、単に非黒画素の平均値を持つことなく、葉をエルゴ

# Get the BGR value 
mean = cv2.mean(mask_upstate) 
multiplier = float(mask.size)/cv2.countNonZero(mask) 
mean = tuple([multiplier * x for x in mean]) 

:この問題を解決する簡単な簡単な方法は、以下のように行うことができ、Total pixels/Non-black pixelsによりmean = cv2.mean(mask_upstate)から結果を乗じてあります黒い背景。

これが役に立った!

+0

関数cv :: countNonZeroでエラーcn == 1が発生しました。それを修正するには? – gygem

+0

マスクはバイナリイメージであり、乗算器の計算は同じ結果を与えるので、mask_upstateではなく、teマスクで行います。ちょうど編集されました! – ebeneditos

+1

ああ、それは働く....ありがとう – gygem

関連する問題