首页 > 解决方案 > 遍历所有像素以检查哪些像素是白色的,哪些是黑色的

问题描述

我正在尝试迭代只有黑白像素的图像。对于每个黑色像素,我想降低一个分数,而对于每个白色像素,我想增加一个分数。但是,在测试以下代码时,我收到此错误:

ValueError: The truth value of an array with more than one element is ambiguous.

它与img[i, j]声明有关。该阵列中怎么会有多个像素?我不是专门通过使用来调用一个像素img[i,j]吗?有人知道我该如何解决这个问题,或者是否有另一种访问 1 个特定像素的工作方法?

def score(img):
    score = 0

    height, width, _ = img.shape
    for i in range(height):
        for j in range(width):
            if img[i, j] == [255,255,255]:
                score = score + 1
            else:
                score = score - 1
    print(score)

使用 openCV 库读取图像。然后将原始图像过滤为特定颜色,并使用该颜色创建蒙版。如前所述,此蒙版只有黑白像素。

img = cv2.imread("images/test.jpg")
mask = cv2.inRange(img, lower_bound, upper_bound)

标签: pythonopencv

解决方案


发生这种情况是因为img[i, j]给出了一个包含 RGB 值的数组

img[i, j] = [0, 0, 0] # 代表黑色

img[i, j] = [255, 255, 255] # 代表白色

并且这些数组与Trueor无关False。你需要改变你的状况。

>>> img[0,0] == [0,0,0]
array([ True,  True,  True])
>>> all(img[0,0] == [0,0,0])
True

您的情况需要一个all().


推荐阅读