用vscode编写python代码,请写出利用opencv实现对单张图片traffic.jpg进行交通灯颜色(红,绿,蓝)的颜色识别的完整代码,并显示交通灯被识别后的结果图
时间: 2024-11-23 11:50:43 浏览: 22
在VS Code中编写Python代码并使用OpenCV进行交通灯颜色识别,你需要先安装必要的库,如`opencv-python`、`matplotlib`。以下是一个简单的例子,展示如何读取图片、分割颜色通道以及进行颜色阈值检测:
```python
# 导入所需库
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图片
img = cv2.imread('traffic.jpg', cv2.IMREAD_COLOR)
# 分割RGB三个通道
b, g, r = cv2.split(img)
# 定义每个颜色通道的阈值 (这里假设红灯是红色通道最强,绿灯是绿色通道最强,蓝灯是蓝色通道最强)
red_lower = (0, 50, 50) # 红色范围下限
red_upper = (10, 255, 255) # 红色范围上限
green_lower = (40, 50, 50) # 绿色范围下限
green_upper = (70, 255, 255) # 绿色范围上限
blue_lower = (90, 50, 50) # 蓝色范围下限
blue_upper = (130, 255, 255) # 蓝色范围上限
# 应用阈值
mask_red = cv2.inRange(r, red_lower, red_upper)
mask_green = cv2.inRange(g, green_lower, green_upper)
mask_blue = cv2.inRange(b, blue_lower, blue_upper)
# 汇总所有颜色的结果
color_masks = [mask_red, mask_green, mask_blue]
color_counts = {color: cv2.countNonZero(mask) for color, mask in zip(['Red', 'Green', 'Blue'], color_masks)}
# 找到颜色最多的区域
max_color, max_count = max(color_counts.items(), key=lambda x: x[1])
# 显示原图和识别结果
plt.subplot(121), plt.imshow(cv2.merge((r, g, b)), cmap='gray')
plt.title(f"Original Image - Max Color: {max_color}")
plt.subplot(122), plt.imshow(cv2.bitwise_and(img, img, mask=color_masks[max_color]), cmap='gray')
plt.title(f"Detected Traffic Light Color: {max_color.upper()}")
plt.show()
阅读全文