Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy np.任何范围或阈值_Python_Numpy_Opencv_Rgb - Fatal编程技术网

Python Numpy np.任何范围或阈值

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

我正在使用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:针对任何
[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
(红、绿、蓝)