我想在二维数组中计数。例如:
list1 = [[1, 2, 3, 4], [1, 2, 3, 4]]
list2 = [1, 2, 3, 4]
print(list1.count(list2))
结果是:2
像魅力一样工作。现在我从OpenCV得到了一个“示例数组”,它不能像之前的示例那样工作。
img = cv2.imread('./Unbenannt.png')
i = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
PixelArray = []
for a in range(i.shape[0]):
PixelArray.append(i[a][0])
a = PixelArray[0]
print(PixelArray.count(a))
因此,起初我正在读取图像,从BGR更改为RGB(对于后续步骤很重要)。 在此步骤之后,我想为第一个“行”添加一个数组。 ->像素阵列 因此,结果是具有不同颜色值的阵列数组。例如。在第一个位置[255,255,255]。现在我要数一下这种颜色。 :
print(PixelArray.count(a))
现在我得到此异常:
print(PixelArray.count(a))
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
所以我不知道怎么了。我已经知道我的PixelArray中的这些数组是类型'dtype = uint8'。
提前谢谢
答案 0 :(得分:0)
我相信是因为您试图在list.count
数组上使用numpy
方法。您只需要在for循环中进行一些细微调整即可将数组转换为列表:
for a in range(i.shape[0]):
PixelArray.append( list(i[a][0]) )
a = PixelArray[0]
print(PixelArray.count(a))
或者,您可以使用np.unique
,并返回一个以数组作为键并以数值作为值的字典。然后只需在字典中搜索所需的数组即可(您需要将a
转换为元组以成功为字典建立索引):
for a in range(i.shape[0]):
PixelArray.append(i[a][0])
unq_rows, count = np.unique(PixelArray, axis=0, return_counts=True)
vec_counts_dictionary = {tuple(i):j for i,j in zip(unq_rows, count)}
a = tuple(PixelArray[0])
print(vec_counts_dictionary[a])