(1)交通灯识别 给定若干张交通灯图片。要求能够准确识别给定图片的亮灯的颜色的代码
时间: 2023-07-31 07:05:37 浏览: 84
以下是一个使用OpenCV库进行交通灯识别的Python代码示例:
```python
import cv2
# 定义颜色阈值
lower_red = (0, 100, 100)
upper_red = (10, 255, 255)
lower_yellow = (26, 43, 46)
upper_yellow = (34, 255, 255)
lower_green = (35, 43, 46)
upper_green = (77, 255, 255)
# 加载图像
img = cv2.imread('traffic_light.jpg')
# 将图像转换为HSV颜色空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 分割出红色区域
mask_red = cv2.inRange(hsv, lower_red, upper_red)
# 分割出黄色区域
mask_yellow = cv2.inRange(hsv, lower_yellow, upper_yellow)
# 分割出绿色区域
mask_green = cv2.inRange(hsv, lower_green, upper_green)
# 对红色区域进行形态学操作
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
mask_red = cv2.morphologyEx(mask_red, cv2.MORPH_OPEN, kernel)
# 查找轮廓并确定亮灯位置和颜色
contours_red, _ = cv2.findContours(mask_red, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours_yellow, _ = cv2.findContours(mask_yellow, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours_green, _ = cv2.findContours(mask_green, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours_red:
# 计算轮廓面积
area = cv2.contourArea(cnt)
# 如果面积较小,则忽略
if area < 150:
continue
# 计算轮廓外接矩形
rect = cv2.minAreaRect(cnt)
# 获取矩形四个顶点坐标
box = cv2.boxPoints(rect)
box = np.int0(box)
# 在图像上绘制矩形和文字
cv2.drawContours(img, [box], 0, (0, 0, 255), 2)
cv2.putText(img, "red", (box[0][0], box[0][1]), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
for cnt in contours_yellow:
# 计算轮廓面积
area = cv2.contourArea(cnt)
# 如果面积较小,则忽略
if area < 150:
continue
# 计算轮廓外接矩形
rect = cv2.minAreaRect(cnt)
# 获取矩形四个顶点坐标
box = cv2.boxPoints(rect)
box = np.int0(box)
# 在图像上绘制矩形和文字
cv2.drawContours(img, [box], 0, (0, 255, 255), 2)
cv2.putText(img, "yellow", (box[0][0], box[0][1]), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 255), 2)
for cnt in contours_green:
# 计算轮廓面积
area = cv2.contourArea(cnt)
# 如果面积较小,则忽略
if area < 150:
continue
# 计算轮廓外接矩形
rect = cv2.minAreaRect(cnt)
# 获取矩形四个顶点坐标
box = cv2.boxPoints(rect)
box = np.int0(box)
# 在图像上绘制矩形和文字
cv2.drawContours(img, [box], 0, (0, 255, 0), 2)
cv2.putText(img, "green", (box[0][0], box[0][1]), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
该代码可以识别出交通灯中亮着的红、黄、绿三种颜色,并在图像上绘制出标记。需要注意的是,该代码只是一个简单的示例,实际应用中还需要对算法进行优化和改进。
阅读全文