我正在使用python、OpenCV和Numpy。我的目标是找到所有的白色像素,把它变成红色,把所有其他关闭或白色。我的代码:
import numpy as np
import cv2
import matplotlib.pyplot as plt
# Read mask
image = cv2.imread("path to my image")
any_white = np.any(image == [255,255,255], axis = -1)
image[any_white]=[255,0,0]
plt.imshow(image)
plt.show()
cv2.imwrite('result.png',image)
问题1:以任何[255,255,255]
为目标并不能找到全部,怀特主义者,我开始寻找任何[244,244,244]
、[243,243,243]
等等。有没有办法设置白色的范围,可能是从[255,255,255]
到[230,230,230]
?你知道吗
问题2:很明显,在python中使用plt.imshow(image)
和plt.show()
,结果显示为红色,但是当我使用cv2.imwrite('result.png',image)
保存时,结果显示为蓝色。请参见结果图像。你知道吗
问题1: 您计划瞄准的像素可能没有
(255, 255, 255)
的精确值。因此,最好通过设置像素值的范围来对图像进行二值化。通过创建轨迹栏并手动调整它们,可以找到精确的范围。您可以在OpenCVhere中找到有关实现轨迹栏的更多信息。你知道吗问题2: 这是因为OpenCV默认使用
BGR
或(Blue, Green, Red)
颜色空间。在保存之前,可以使用cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
将颜色空间更改为RGB
或(Red, Green, Blue)
。你知道吗问题1: 您可以创建一个掩码,并将红色通道设置为
False
,这样,如果您只想以白色像素为目标,就可以将值保持在255如果要查找某个范围内的所有值,可以使用
cv2.inRange
:问题2: OpenCV使用BGR作为默认值而不是RGB,您可以使用以下命令将BGR转换为RGB:
请记住,如果您用OpenCV打开一个图像,它将是BGR,所以在操作通道之前转换它。你知道吗
相关问题 更多 >
编程相关推荐