我只是cv2的新手。我正在测试一个程序,将图像的所有绿色像素转换为白色。
I have chosen this sample image:
这是我的python程序。
import cv2
import numpy as np
img=cv2.imread('exp.jpg',cv2.IMREAD_COLOR)
row,cols,layer=img.shape
for i in range (row):
for j in range (cols):
a=img[i,j]
if(a[1]>128):
img[i, j] = [255, 255, 255]
cv2.imshow('a',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
该程序工作得非常好,但所需图片的某些部分也会丢失。
This is the output image
我不知道出了什么问题。我甚至通过
检查了那个像素的BGR值print(img[432,144])
它的输出是[37 209 37]。我不认为它的实际颜色,因为当我在rgbtohex.net中使用它们来查看颜色时,它就像它一样。 我不知道那里出了什么问题。如果我对任何事情都不对,请原谅我。
答案 0 :(得分:1)
您必须重新考虑if
声明,才能更好地处理这些图片,而不包含不需要的像素。对于exemaple [0 255 255]是Cyan但它也将被包括在if(a[1]>128):
a[1] = 255
和if 255 > 128
中。
现在我们知道我们希望G
具有高值,R
或B
低值,示例解决方案为if(a[1] > 200 and a[0] < 128 and a[2] < 128)
。
当然,我的示例可能比你在不同的图像上更糟糕,这就是为什么你想先使用一些图像处理工具。你可以在这里了解更多信息image procesing