【发布时间】:2019-06-04 10:09:30
【问题描述】:
我正在尝试迭代只有黑白像素的图像。对于每个黑色像素,我想降低一个分数,而对于每个白色像素,我想增加一个分数。然而,在测试以下代码时,我得到了这个错误:
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)
【问题讨论】:
-
img有三个维度,所以img[i, j]不是单个值,而是一个向量。如果第三维是1,你可以直接使用img[i, j, 0]。但是,在这种情况下,您可以使用score = 2 * np.count_nonzero(img) - img.size。 -
首先
print(score)不起作用,您能否说明您使用哪个库(至少,最好是您定义的方式)来创建图像 -
打印的缩进错误,我修好了。为了创建图像,我使用了 openCV。我会更新问题。
-
变量和函数名相同..不是个好主意!
-
有opencv api可以查询图片格式、通道数、深度ecc。请这样做,然后更新您的问题,如果您不指定图像的详细信息,以下答案将毫无意义