ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

时间:2015-03-06 14:13:08

标签: python opencv numpy

请注意,我已阅读同一问题的答案,但没有人像我的。

我在OpenCV中加载了一张图片并显示出来。一切都很好。

现在我想将黑色像素设置为蓝色,所以我运行它:

for i in range(image.shape[0]):
    for j in range(image.shape[1]):
       if image[i,j,0]==0 and image[i,j,1]==0 and image[i,j,2]==0:
          image[i,j,0]=255

我收到了这个错误:

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

Nota Bene:

  • 符号image[i,j,0]image[i,j,1]image[i,j,2]用于强调像素通道的值(BGR =蓝绿红色),因此它不是数组,因为此错误消息说。如果Python不了解自己,那就太奇怪了。

  • 当我使用print image[i,j,x] = 0,1,2运行x时,我会得到ij的随机值的正常行为。也就是说,我正确地得到了这3个频道的值。

1 个答案:

答案 0 :(得分:1)

试试这个:

import numpy as np

image[np.all(image == 0, axis=-1)] = [255, 0, 0]

在这里,您只使用numpy操作检查Z轴,并将其替换为像素通道均为0的蓝色。 它是无限的(至少对于大图像而言)并且也不那么狡猾。