Python Numpy np.任何范围或阈值
我正在使用python、OpenCV和Numpy。我的目标是找到所有白色像素,将其变成红色,并将其他所有像素都关闭或变成白色。我的代码:Python Numpy np.任何范围或阈值,python,numpy,opencv,rgb,Python,Numpy,Opencv,Rgb,我正在使用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], ax
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:针对任何[255255255]
都找不到,whiteist,我开始查找任何[244244244]
,[243243243]
等等。有没有办法设置白色的范围,可能是从[255255255]
到[230230230]
问题2:显然,在python中使用plt.imshow(image)
和plt.show()
时,结果显示为红色,但当我使用cv2.imwrite('result.png',image)
保存时,结果显示为蓝色。请参见结果图像。问题1:
您可以创建一个遮罩,并将红色通道设置为False
,这样,如果您只想以白色像素为目标,则可以将该值保持在255
mask_bg = (image == [255, 255, 255])
mask_bg[:, :, 0] = False # set red channel mask to false (leave 255 value)
image[mask_bg] = 0 # set all white pixels to [255, 0, 0]
如果要查找某个范围内的所有值,可以使用cv2.inRange
:
mask = cv2.inRange(image, (230, 230, 230), (255, 255,255))
问题2:
OpenCV使用BGR作为默认值而不是RGB,您可以通过以下方式将BGR转换为RGB:
new_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
cv2.imshow('BGR Image', new_image )
请记住,如果使用OpenCV打开图像,它将是BGR,因此请在操作通道之前对其进行转换。问题1: 您计划瞄准的像素的确切值可能不是
(255、255、255)
。因此,最好通过设置一系列像素值来对图像进行二值化。通过创建轨迹栏并手动调整它们,可以找到精确的范围。您可以找到有关在OpenCV中实现轨迹栏的更多信息
问题2:
这是因为OpenCV默认使用BGR
或(蓝色、绿色、红色)
颜色空间。保存前,您可以使用cv2.cvt颜色(图像,cv2.COLOR\u BGR2RGB)
将颜色空间更改为RGB
或(红、绿、蓝)