要可以识别六种颜色的代码
时间: 2024-04-16 13:26:22 浏览: 16
以下是一个可以识别六种颜色的基于Python和OpenCV的代码示例:
```python
import cv2
import numpy as np
def get_color_name(hue):
# 定义颜色名称和对应的色相范围
colors = {
'red': [165, 15],
'orange': [16, 45],
'yellow': [46, 75],
'green': [76, 105],
'blue': [106, 135],
'purple': [136, 165]
}
for color, (lower, upper) in colors.items():
if lower <= hue <= upper:
return color
return None
# 打开摄像头
cap = cv2.VideoCapture(0)
while True:
# 读取摄像头图像
ret, frame = cap.read()
if ret:
# 将图像转换到HSV色彩空间
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# 根据阈值进行颜色分割
lower = np.array([0, 50, 50])
upper = np.array([180, 255, 255])
mask = cv2.inRange(hsv, lower, upper)
# 寻找颜色区域的轮廓
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
# 计算轮廓的中心点位置
M = cv2.moments(contour)
if M["m00"] != 0:
cx = int(M["m10"] / M["m00"])
cy = int(M["m01"] / M["m00"])
# 提取中心点位置的颜色
hue = hsv[cy, cx, 0]
color_name = get_color_name(hue)
# 在图像上标注颜色名称和中心点
cv2.putText(frame, color_name, (cx-20, cy), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2)
cv2.circle(frame, (cx, cy), 5, (255, 255, 255), -1)
# 显示原始图像
cv2.imshow('Color Detection', frame)
# 按下ESC键退出循环
if cv2.waitKey(1) == 27:
break
# 释放摄像头并关闭窗口
cap.release()
cv2.destroyAllWindows()
```
此代码示例将打开摄像头并读取视频帧。然后,将图像转换为HSV色彩空间,并根据阈值进行颜色分割。接下来,寻找颜色区域的轮廓,并计算每个轮廓的中心点位置。根据中心点位置的颜色进行识别,并在图像上标注颜色名称和中心点。最后,显示原始图像并等待用户按下ESC键退出循环。
请注意,此示例仅用于演示目的,实际应用中可能需要根据具体情况进行适当调整。