您的OpenCV或Numpy Gurus,
我一直在寻找答案,但是很惊讶在这里或其他地方找不到它...
我有一个黑色图像,我想用某个值替换像素列表(很大的列表)。将来,“某些值”将是值的列表,但是目前,让我们保持简单。
进一步简化,我只在下面使用一个二维数字数组,而不是RGB值... 因此,这种效率很低的方法适用于这种情况:
a = np.zeros((5, 5,1))
for i in np.asarray( ([2,3],[3,4]) ):
a[i[0], i[1]] = 20
我希望有一种方法可以在不依赖python循环的二维数组上使用np.put
。
现在,我建议我可以使用
a[ ([2,3],[3,4]) = 20
但是,我发现在真正的OpenCV问题中使用这种方法时,它不起作用。这种非常低效的方法可以做到:
coords_list = ([3,5],[55,60],[25,90])
black_image =np.zeros((480,640,3))
for i in coords_list:
black_image[i[1],i[0]] = [255,255,255]
我希望对许多人来说这是一个简单的问题。
谢谢!
答案 0 :(得分:1)
实际上,您可以直接使用坐标的元组为矩阵建立索引:简单的a[([2, 3], [3, 4])] = 20
给出的结果与此处的for循环完全相同。
答案 1 :(得分:0)
感谢Paul Panzer和RomualdM ...
根据他们的评论,这似乎可以满足我的要求...
coords_list = ([3,5],[55,60],[25,90])
black_image =np.zeros((480,640,3))
I,J = np.transpose(coords_list)
black_image[I,J] = [255,255,255]
cv2.imshow('black_image', black_image)
while (1):
k = cv2.waitKey(0) #press esc to kill
if (k == 27):
break
cv2.destroyAllWindows()