opencv python cv2.inRange()
时间: 2024-05-07 15:20:55 浏览: 10
`cv2.inRange()` 是 OpenCV 中用于将图像中的像素值限定在一定范围内的函数。它的语法如下:
```python
cv2.inRange(src, lowerb, upperb[, dst])
```
其中,参数 `src` 是输入图像,`lowerb` 和 `upperb` 分别是下界和上界,用于限定像素值的范围。像素值在这个范围内的像素被保留,其他像素被设为 0。参数 `dst` 是输出的二值图像,需要与输入图像的大小和类型相同,如果不指定则会创建一个新的图像。
例如,下面的代码将输入图像中像素值在 100 到 200 之间的部分提取出来:
```python
import cv2
img = cv2.imread('input.jpg')
lowerb = (100, 0, 0)
upperb = (200, 255, 255)
mask = cv2.inRange(img, lowerb, upperb)
cv2.imshow('mask', mask)
cv2.waitKey(0)
```
这里假设输入图像为 `input.jpg`,且为 RGB 彩色图像。`lowerb` 和 `upperb` 分别由三个元素组成,分别对应图像的 BGR 三个通道。本例中只针对蓝色通道进行了限制,因此效果类似于提取出输入图像中蓝色像素的部分。输出的二值图像 `mask` 中,被保留的像素值为 255,其他像素值为 0。
相关问题
cv2.inrange
`cv2.inRange` 函数是 OpenCV 中用于对图像进行阈值处理的函数之一。它的作用是将输入图像中的像素值与指定的范围进行比较,如果像素值在范围内,则输出为白色,否则输出为黑色,从而实现对图像的分割。
函数的语法如下:
```python
cv2.inRange(src, lowerb, upperb[, dst])
```
其中,参数 `src` 表示输入图像,必须为单通道(灰度图像)或三通道(彩色图像);参数 `lowerb` 和 `upperb` 表示阈值范围,可以是标量或具有与输入图像相同通道数的数组;参数 `dst` 表示输出图像,可选。
下面是一个示例代码,演示了如何使用 `cv2.inRange` 函数对彩色图像进行颜色分割:
```python
import cv2
import numpy as np
# 读取输入图像
img = cv2.imread('input.jpg')
# 定义阈值范围
lower = np.array([0, 0, 0])
upper = np.array([100, 100, 100])
# 对图像进行阈值处理
mask = cv2.inRange(img, lower, upper)
# 将掩膜应用于原始图像
output = cv2.bitwise_and(img, img, mask=mask)
# 显示输出图像
cv2.imshow('Output', output)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个例子中,我们首先读取了一张彩色图像,然后定义了阈值范围,即 `[0, 0, 0]` 到 `[100, 100, 100]`。接着,我们使用 `cv2.inRange` 函数将图像中像素值在这个范围内的部分提取出来,得到了一个二值掩膜。最后,我们将掩膜应用于原始图像,得到了颜色分割后的输出图像。
cv2.inrange函数
cv2.inRange函数是OpenCV库中的一个函数,用于在图像中提取指定范围内的像素值。该函数可以帮助我们实现图像分割、颜色识别等任务。
函数的语法如下:
```python
cv2.inRange(src, lowerb, upperb, dst=None)
```
参数说明:
- src:输入图像,可以是单通道或多通道图像。
- lowerb:指定颜色范围的下界,可以是一个标量或一个包含每个通道下界的数组。
- upperb:指定颜色范围的上界,可以是一个标量或一个包含每个通道上界的数组。
- dst:输出图像,与输入图像具有相同的大小和深度。如果未提供,则会创建一个与输入图像相同大小和深度的图像。
该函数会根据指定的颜色范围,在输入图像中将在范围内的像素设置为255(白色),其余像素设置为0(黑色)。可以通过对输出图像进行二值化处理,将感兴趣的区域提取出来。
例如,下面的代码将提取输入图像中红色范围内的像素:
```python
import cv2
import numpy as np
image = cv2.imread('input.jpg')
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower_red = np.array([0, 100, 100])
upper_red = np.array([10, 255, 255])
mask = cv2.inRange(hsv_image, lower_red, upper_red)
result = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码中,首先将输入图像转换为HSV颜色空间,然后定义了红色范围的下界和上界。通过cv2.inRange函数生成了一个遮罩图像,然后使用cv2.bitwise_and函数将遮罩应用到原始图像上,得到提取出红色区域的结果图像。最后通过cv2.imshow显示结果图像,并通过cv2.waitKey等待按键响应,最后通过cv2.destroyAllWindows关闭窗口。
希望能解答到您的问题!如果您还有其他问题,请继续提问。