假设我有一个RGB值列表,如下所示:
rgbL = [[20 45 40] [30 45 60] .... [70 50 100]]
然后,我有一个图像说,img = cv.imread("location")
现在,如果图像RGB值在我的RGB值列表(rgbL)中,我想将图像的所有RGB值更改为(255,0,0)
我可以通过以下代码完成此操作:
for rgb in rgbL :
k = list(filter(None, rgb[1:-1].split(" ")))
r = int(k[0])
g = int(k[1])
b = int(k[2])
img[np.all(img == (r, g, b), axis=-1)] = (255,0,0)
但是上面的代码太长,因为我的“rgbL”列表太长
有没有一种方法可以不用循环就可以做到这一点?以numpyish的方式实现它的最佳方式是什么
上述算法是O(rgbL的长度*图像的大小)
我们可以把它降到O(rgbL的长度+图像的大小)
这里发生的是我们创建了一组rgbL值。插入集是恒定时间操作。对于查找,同样适用。因此,当我们对图像中的每个像素值进行迭代时,我们花费了O(1)时间。这将提高我们的时间复杂性
希望有帮助
将
rgbL
和img
转换为numpy数组。一种不用循环的方法:这将获取图像与
rgbL
每行的差异,并检查要使用np.where
替换的RGB中的all
零差异样本
img
和输出:更新:每个OP关于将字符串dict键转换为numpy数组的评论:
相关问题 更多 >
编程相关推荐