opencv中HSV颜色识别
时间: 2024-12-31 07:39:03 浏览: 17
### OpenCV 中的 HSV 颜色检测
HSV(Hue, Saturation, Value)颜色空间是一种更接近人类感知的颜色表示方式,在色彩识别方面具有优势。相比于RGB,HSV能更好地分离色调、饱和度和亮度信息[^1]。
#### 使用 `cv2.cvtColor` 进行颜色空间转换
为了实现基于HSV模型的颜色检测,首先需要将输入图像由默认的BGR格式转为HSV格式:
```python
import cv2
import numpy as np
# 加载原始图像并显示
img_bgr = cv2.imread('colorful_object.png')
cv2.imshow("Original", img_bgr)
# 转换成HSV模式
hsv_img = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV)
```
#### 定义目标颜色范围
通过设定上下限来定义要查找的目标颜色区间。这里以红色为例说明如何设置阈值参数:
```python
# 设定红色区域的HSV边界值 (注意OpenCV中H分量取值范围是[0,179])
lower_red = np.array([0, 120, 70])
upper_red = np.array([10, 255, 255])
mask_1 = cv2.inRange(hsv_img, lower_red, upper_red)
# 对于跨越H=0的情况也需要考虑另一部分红区间的掩码
lower_red = np.array([170, 120, 70])
upper_red = np.array([180, 255, 255])
mask_2 = cv2.inRange(hsv_img, lower_red, upper_red)
# 合并两个掩码得到完整的红色区域
red_mask = mask_1 + mask_2
```
上述代码片段展示了针对特定颜色创建二值化掩膜的过程,其中使用了`cv2.inRange()`函数来进行像素级别的筛选。
#### 结果可视化与保存
最后可以对获得的结果进行一些简单的处理以便观察效果,并将其保存下来:
```python
# 应用蒙版获取最终输出图像
res = cv2.bitwise_and(img_bgr, img_bgr, mask=red_mask)
# 展示原图对比效果图
cv2.imshow("Detected Color Region", res)
# 存储结果图片
cv2.imwrite('detected_color_region.jpg', res)
# 关闭所有打开窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段程序实现了从加载图像到执行颜色过滤再到结果显示的一系列操作,能够有效地帮助理解HSV颜色检测的工作原理及其具体实施步骤[^2]。
阅读全文