ste*_*918 10 python opencv numpy
我正在使用OpenCV和Python.我有一个图像,我想要做的是将BGR值[0,0,255]的所有像素设置为[0,255,255].
我问了一个关于如何对图像进行分色的前一个问题,并从我学到的关于使用索引数组进行索引的答案,例如:image [image> 128] = 255
我理解这是如何工作的,因为image> 128将返回一个满足条件的多维索引数组,然后我将这个数组应用于图像并将它们设置为255.但是,我对如何混淆将此扩展为为数组执行值.
我尝试过以下操作:
red = np.array([0, 0, 255])
redIndex = np.where(np.equal(image, red))
image[redIndex] = np.array([0, 255, 255])
Run Code Online (Sandbox Code Playgroud)
但它不起作用,错误:
ValueError: array is not broadcastable to correct shape
Run Code Online (Sandbox Code Playgroud)
有没有一种有效的方法来处理这个问题?
Abi*_*n K 16
考虑像下面的数组图像:
>>> red
array([[[ 0, 0, 255],
[ 0, 0, 255],
[ 0, 0, 255],
[ 0, 0, 255],
[ 0, 0, 255]],
[[ 0, 0, 255],
[ 0, 0, 255],
[ 0, 0, 255],
[ 0, 0, 255],
[ 0, 0, 255]]])
Run Code Online (Sandbox Code Playgroud)
它的所有元素都是[0,0,255].它的形状是2x5x3.试想其中还有其他值.(我无法创造所有这些).
现在您找到[0,0,255]存在的位置并将其更改为[0,255,255].你可以这样做:
>>> red[np.where((red == [0,0,255]).all(axis = 2))] = [0,255,255]
Run Code Online (Sandbox Code Playgroud)
现在检查红色.
>>> red
array([[[ 0, 255, 255],
[ 0, 255, 255],
[ 0, 255, 255],
[ 0, 255, 255],
[ 0, 255, 255]],
[[ 0, 255, 255],
[ 0, 255, 255],
[ 0, 255, 255],
[ 0, 255, 255],
[ 0, 255, 255]]])
Run Code Online (Sandbox Code Playgroud)
希望这是你想要的.
检测结果:
查看以下链接中的代码:https://stackoverflow.com/a/11072667/1134940
我想将所有红色像素更改为黄色,如问题所示.
所以我在最后添加了以下代码:
im2[np.where((im2 == [0,0,255]).all(axis = 2))] = [0,255,255]
Run Code Online (Sandbox Code Playgroud)
以下是我得到的结果:

如果我想将绿地改为黄地怎么办:
im2[np.where((im2 == [0,255,0]).all(axis = 2))] = [0,255,255]
Run Code Online (Sandbox Code Playgroud)
结果:
