我正在使用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:瞄准任何qazxsw poi都找不到所有,最白,我开始找到任何qazxsw poi,[255,255,255]
等等。有没有办法设置一个白色的范围,可能从[244,244,244]
到[243,243,243]
?
[255,255,255]
问题2:显然,在python中使用[230,230,230]
和,结果显示为红色,但是当我使用plt.imshow(image)
保存时,它是蓝色的。见结果图。
问题1:你可以创建一个蒙版并将红色通道设置为plt.show()
,这样如果你只想定位白色像素,你可以将值保持在255
cv2.imwrite('result.png',image)
如果要查找范围内的所有值,可以使用False
:
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]
问题2:OpenCV使用BGR作为默认值而不是RGB,您可以使用以下命令从BGR转换为RGB:
cv2.inRange
请记住,如果使用OpenCV打开图像,它将是BGR,因此在操作通道之前进行转换。
问题1:您计划定位的像素可能没有mask = cv2.inRange(image, (230, 230, 230), (255, 255,255))
的确切值。因此,最好通过设置像素值范围来对图像进行二值化。您可以通过创建轨迹栏并手动调整它们来找到确切的范围。您可以在OpenCV new_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
cv2.imshow('BGR Image', new_image )
中找到有关实施Trackbars的更多信息。
问题2:这是因为OpenCV默认使用(255, 255, 255)
或here颜色空间。您可以在保存之前使用BGR
将颜色空间更改为(Blue, Green, Red)
或RGB
。