cv2.inrange
时间: 2023-07-02 07:04:08 浏览: 170
cv2.inrange是OpenCV库中的一个函数,用于将图像转换为二值图像。它接受三个参数:输入图像、低于阈值的像素值、高于阈值的像素值。函数会将输入图像中低于阈值和高于阈值之间的像素值设为255,其余像素设为0,然后返回二值图像。
例如,如果我们想将一张灰度图像中所有像素值在50到100之间的像素设为白色,其余像素设为黑色,可以使用如下代码:
```
import cv2
img_gray = cv2.imread('image.png', cv2.IMREAD_GRAYSCALE)
mask = cv2.inrange(img_gray, 50, 100)
cv2.imshow('mask', mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段代码会将图像读取为灰度图像,然后用cv2.inrange函数生成一个二值图像,最后将二值图像显示出来。
相关问题
手动实现cv2.inRange函数
下面是手动实现cv2.inRange函数的代码示例:
```python
import numpy as np
def inRange(img, lower, upper):
lower = np.array(lower)
upper = np.array(upper)
mask = np.zeros_like(img)
for c in range(img.shape[2]):
mask[:,:,c] = np.logical_and(img[:,:,c] >= lower[c], img[:,:,c] <= upper[c])
return np.all(mask, axis=2).astype(np.uint8) * 255
```
该函数接受三个参数:图像img,颜色范围的下限lower,颜色范围的上限upper。它会返回一个掩膜图像,其中在颜色范围内的像素值为255,否则为0。
该函数的实现方式是首先将颜色范围下限和上限转换为numpy数组,然后创建一个与输入图像相同大小的掩膜图像。接下来,对于每个通道,我们使用numpy.logical_and函数计算该通道中在颜色范围内的像素,并将结果存储在掩膜图像上。最后,我们使用numpy.all函数将所有通道的掩膜图像合并,并将结果转换为灰度图像。
cv2.inRange
cv2.inRange() 是 OpenCV 中的一个函数,用于创建一个二值掩膜(mask),提取出输入图像中像素值在指定范围内的部分。这个函数的语法为:
`cv2.inRange(src, lowerb, upperb[, dst])`
其中,src 是输入图像,lowerb 和 upperb 是指定的范围,dst 是输出的二值掩膜。例如,如果想提取出输入图像中颜色在蓝色范围内的部分,可以使用以下代码:
```
import cv2
import numpy as np
img = cv2.imread("test.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_blue = np.array([110, 50, 50])
upper_blue = np.array([130, 255, 255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
res = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow("img", img)
cv2.imshow("mask", mask)
cv2.imshow("res", res)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段代码先将输入图像转换为 HSV 颜色空间,然后定义了颜色范围 lower_blue 和 upper_blue,在 HSV 颜色空间中,蓝色的范围是 [110, 50, 50] 到 [130, 255, 255]。最后使用 cv2.inRange() 函数提取出颜色在范围内的部分,并将其与原图进行按位与操作,得到提取出来的部分。
阅读全文