0

をチェックします。私は 緑色がマッサージを印刷するように検出されたかどうかを確認したいと青の色が別のメッセージを印刷するように検出された場合、あまりにもここで 私は緑と青の2色を検出するためのコードを持っている色のOpenCVのPython

はコードです:上記のコードを実行する

import cv2 

import numpy as np 

cap = cv2.VideoCapture(0) 

while(1): 

    # Take each frame 
    _, frame = cap.read() 

    # Convert BGR to HSV 
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 

    # define range of blue color in HSV 
    lower_blue = np.array([110,50,50]) 
    upper_blue = np.array([130,255,255]) 

    lower_green = np.array([50, 50, 120]) 
    upper_green = np.array([70, 255, 255]) 
    green_mask = cv2.inRange(hsv, lower_green, upper_green) # I have the Green threshold image. 

    # Threshold the HSV image to get only blue colors 
    blue_mask = cv2.inRange(hsv, lower_blue, upper_blue) 
    mask = blue_mask + green_mask 
############this is the Error #################### 
    if mask==green_mask: 
     print "DOne" 
################################################ 

    # Bitwise-AND mask and original image 
    res = cv2.bitwise_and(frame,frame, mask= mask) 

    cv2.imshow('frame',frame) 
    cv2.imshow('mask',mask) 
    cv2.imshow('res',res) 
    k = cv2.waitKey(5) & 0xFF 
    if k == 27: 
     break 

cv2.destroyAllWindows() 

私に次のエラーを与えます:

if mask==green_mask:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

これを修正する方法はありますか?

答えて

0

比較時にif mask==green_maskは、単一のブール値を必要とするif条件を満たすことができない次元のブール値の配列を返します。

あなたは行列maskgreen_maskはすべて同じであり、そうでない場合はfalseを返す場合trueを返す関数を使用する必要があります。この関数は、このif状態で呼び出す必要があります。

編集: それはあなたの問題を解決します

if np.array_equal(mask, green_mask):

でコードを置き換えます。

+0

は、私は申し訳ありませんが私は、この関数@MDのENYヒントを必要とするイム、関数の中で、この場合の条件を書いて、それを呼び出す必要があることを意味します。 Nazmul Kibria –

+0

は私の編集....それは非常によくあなたがもっとQustionsのために私にあなたの電子メールを与える気にしている場合 はあなたが @MDをplezできる作品たくさんあなたの問題 –

+0

感謝を修正する希望を参照してください。ナスムルキブリア –

関連する問題