Numpy np.any 范围或阈值
Numpy np.any range or threshold
我正在使用 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)
保存的时候是蓝色的。查看结果图片。
问题一:
您可以创建一个蒙版并将红色通道设置为 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))
问题二:
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)
的确切值。因此,最好通过设置像素值范围来对图像进行二值化。您可以通过创建 Trackbars 并手动调整它们来找到确切的范围。您可以找到有关在 OpenCV here.
中实现 Trackbars 的更多信息
问题二:
发生这种情况是因为 OpenCV 默认使用 BGR
或 (Blue, Green, Red)
色彩空间。您可以在保存前使用 cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
将色彩空间更改为 RGB
或 (Red, Green, Blue)
。
我正在使用 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)
保存的时候是蓝色的。查看结果图片。
问题一:
您可以创建一个蒙版并将红色通道设置为 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]
如果你想找到一个范围内的所有值,你可以使用 cv2.inRange
:
mask = cv2.inRange(image, (230, 230, 230), (255, 255,255))
问题二: 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)
的确切值。因此,最好通过设置像素值范围来对图像进行二值化。您可以通过创建 Trackbars 并手动调整它们来找到确切的范围。您可以找到有关在 OpenCV here.
问题二:
发生这种情况是因为 OpenCV 默认使用 BGR
或 (Blue, Green, Red)
色彩空间。您可以在保存前使用 cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
将色彩空间更改为 RGB
或 (Red, Green, Blue)
。