Opencv或Numpy-有效替换图像中的像素列表

时间:2018-10-18 04:24:38

标签: python numpy opencv

您的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]

我希望对许多人来说这是一个简单的问题。

谢谢!

2 个答案:

答案 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()