如何使用opencv-python中的摄像头分别对红 蓝 黄三种物体进行识别 并对识别到的物体进行标注并进行展示
时间: 2023-06-18 16:02:40 浏览: 161
要使用 OpenCV-Python 对红、蓝、黄三种物体进行识别,可以分为以下几个步骤:
1. 导入必要的库(numpy、cv2)。
2. 打开摄像头,获取每一帧图像。
3. 将每一帧图像转换为 HSV 空间。
4. 根据颜色范围,使用 inRange 函数分别提取红、蓝、黄三种颜色的物体。
5. 对每种颜色的物体进行轮廓检测,找到物体的边界。
6. 给每个物体标注一个矩形框,并在图像上显示。
下面是示例代码:
```python
import numpy as np
import cv2
# 要识别的颜色范围(红、绿、蓝)
color_range = [
((0, 100, 100), (10, 255, 255), "red"),
((36, 100, 100), (86, 255, 255), "green"),
((100, 100, 100), (130, 255, 255), "blue"),
((20, 100, 100), (30, 255, 255), "yellow")
]
cap = cv2.VideoCapture(0)
while True:
# 获取每一帧图像
ret, frame = cap.read()
# 将每一帧图像转换为 HSV 空间
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# 分别提取每种颜色的物体
for (lower, upper, color) in color_range:
mask = cv2.inRange(hsv, lower, upper)
# 对每种颜色的物体进行轮廓检测
contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
# 给每个物体标注一个矩形框
x, y, w, h = cv2.boundingRect(cnt)
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(frame, color, (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
# 在图像上显示
cv2.imshow("frame", frame)
# 按 q 键退出
if cv2.waitKey(1) == ord('q'):
break
# 释放摄像头并关闭窗口
cap.release()
cv2.destroyAllWindows()
```
在代码中,我们定义了一个颜色范围的列表,其中包含了要识别的三种颜色(红、绿、蓝)。对于每种颜色,我们都使用 inRange 函数提取了对应的颜色范围内的物体,并进行了轮廓检测和矩形框标注。最后,在图像上显示出来。
注意:这里的颜色范围是以 HSV 空间来定义的,因为在 HSV 空间中,色调(Hue)的变化与颜色的变化相关,饱和度(Saturation)表示颜色的纯度,明度(Value)表示颜色的亮度。
阅读全文