Checking pixel color in OpenCV with Python

14,547

As it states, you're comparing lists with multiply entries, which is too unprecise.

You'll have to use numpy.any like

import cv2
import numpy as np

img = cv2.imread('/Documents/2016.jpg')

if np.any(img[100, 100] != 0):
    print("the pixel is not black")
Share:
14,547
user3127854
Author by

user3127854

Updated on June 05, 2022

Comments

  • user3127854
    user3127854 almost 2 years

    I am currently working on a project with python and OpenCV. For one part of the project, I would like to check and see if one specific pixel (specifically the pixel with coordinate 100, 100) is not equal to the color black. My code is as follows.

    import cv2
    
    img = cv2.imread('/Documents/2016.jpg')
    
    if img[100, 100] != [0, 0, 0]:
        print("the pixel is not black")
    

    When I go and fun in the terminal I get this error.

    File "/Documents/imCam.py", line 5, in <module>
    if img[100, 100] != [0, 0, 0]:
    ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
    

    What am I doing wrong?

  • Tyler Abair
    Tyler Abair over 5 years
    Doesn't this solution only work for colors that have the same value for all of B, G, and R? How could you compare to a different color? Like if img[100, 100] != [222, 12, 127]:
  • s1hofmann
    s1hofmann over 5 years
    img[100, 100] != [222, 12, 127] returns a list of booleans, np.all() returns True iff each element of a given list is True. So np.all(img[100, 100] == [222, 12, 127]) will check if both colors match.