Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenCV:将特定BGR值的所有像素设置为另一个BGR值_Python_Opencv_Numpy - Fatal编程技术网

Python OpenCV:将特定BGR值的所有像素设置为另一个BGR值

Python OpenCV:将特定BGR值的所有像素设置为另一个BGR值,python,opencv,numpy,Python,Opencv,Numpy,我将OpenCV与Python一起使用。我有一个图像,我想做的是将BGR值[0,0,255]的所有像素设置为[0,255,255] 我问了一个关于如何对图像进行后期处理的问题,从答案中我了解了如何使用索引数组进行索引,例如: 图像[图像>128]=255 我理解这是如何工作的,因为image>128将返回满足条件的多维索引数组,然后我将此数组应用于图像并将其设置为255。但是,我对如何将其扩展到为数组执行值感到困惑 我试着做了以下几点: red = np.array([0, 0, 2

我将OpenCV与Python一起使用。我有一个图像,我想做的是将BGR值[0,0,255]的所有像素设置为[0,255,255]

我问了一个关于如何对图像进行后期处理的问题,从答案中我了解了如何使用索引数组进行索引,例如: 图像[图像>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])
但它不起作用,错误如下:

ValueError: array is not broadcastable to correct shape

是否有一种有效的方法来处理此问题?

请考虑如下类似图像的数组:

>>> 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]]])
其所有元素均为[0,0255]。它的形状是2x5x3。想想它还有其他的价值。(我不能创造所有这些)

现在您可以找到[0,0255]存在的位置,并将其更改为[0255255]。您可以按如下方式进行操作:

>>> red[np.where((red == [0,0,255]).all(axis = 2))] = [0,255,255]
现在检查红色

>>> 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]]])
希望这是你想要的

测试结果:

请从此链接中查看代码:

我想把所有的红色像素都改成黄色

因此,我在末尾添加了以下代码:

im2[np.where((im2 == [0,0,255]).all(axis = 2))] = [0,255,255]
以下是我得到的结果:

如果我想将绿色地面改为黄色地面,该怎么办:

im2[np.where((im2 == [0,255,0]).all(axis = 2))] = [0,255,255]
结果:


< P> < /P>我希望Python中有一个答案,希望使用NoPy,而不是C++,所以它不是一个复制品。嗨,你想用所有元素创建一个图像[0255255 ],或者只是改变一个图像中所有元素的值[02505]到[0255255 ]?嗨,我想把一个图像中的所有元素都改变为[0255]到[0255255 ],谢谢,我有个问题。如果我需要将BGR值范围内的所有像素而不是特定像素值设置为另一个值,是否有任何方法可以使用此方法?谢谢我正在尝试这个例子,但是图像im=cv2.imread('it\u captcha\u green.jpg')im[np.where((im==140230140])。all(axis=2))]=[0,0,0]cv2.imshow('grey image',im)