2016-05-19 80 views
1

赤の色がの場合、の色がドミナントカラーであるかどうかを確認するプログラムを作成します。茶色の強度がより大きいである場合。その後、プログラムは "Detected"を出力します。例えばOpenCV:色の濃さを見つける

enter image description here

、写真の赤い色が支配的な色であるので、プログラムは、「検出」プリントアウトすべきです!

私はこのような代を書かれている:

lower_red = np.array([110, 50, 50], dtype=np.uint8) 
upper_red = np.array([130,255,255], dtype=np.uint8) 
mask = cv2.inRange(hsv, lower_red, upper_red) 
res = cv2.bitwise_and(frame,frame, mask= mask) 

しかし、それだけで画像の色を変換しますが、強度を与えます。ブール値を取得するにはどうすれば画像の赤い色が増えますか?

答えて

1

イメージをHSVカラースペースに変換する必要があります。その空間で赤色を分けるのは簡単です:赤色は[0-10]と[160-180]の近くに色相を持ちます。 赤の比率がしきい値より大きいかどうかを確認できます。

(pseudocode) 

fun isRedColorGreaterThanThreshold(image, threshold) 
    imageHSV = convertToHSV(image) 
    channels = split(imageHSV) 
    Hue = channels[0] 
    ratio = countNonZero((0 < Hue < 10) or (160 < Hue < 180))/image.total() 

    return ratio > threshold 
+0

「channels = split(imageHSV)」とはどういう意味ですか? – VICTOR

+1

"channels"は、Hue = channels [0]、Saturation = channels [1]、value = channels [2]、opencvには関数[split](http://docs.opencv.org/2.4/)のバンドのベクトルです。 modules/core/doc/operations_on_arrays.html#split) –

+0

もう1つ質問:「image.total()」の意味は何ですか?イメージ内のピクセルの総数ですか? – VICTOR

関連する問題