checking the Colors Opencv Python

2019-09-16 05:15发布

问题:

I have a code to detect two colors green and blue. I want to check if green color is detected to print a massage and if blue color is detected to print another message too

Here is the Code:

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()

Running the above code gives me following error:

if mask==green_mask:

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

Any ideas how to fix this?

回答1:

On comparing if mask==green_mask returns an array of boolean value of their dimension which can not satisfy an if condition which require a single boolean.

You need to use a function which will return true if matrix mask and green_mask are all same and return false otherwise. That function should be called under this if condition.

Edit: Replace the code with

if np.array_equal(mask, green_mask):

It will fix your issue.