opencv红绿灯霍夫圆
时间: 2023-11-30 13:42:35 浏览: 147
opencv 红绿灯识别 运动物体识别
霍夫圆变换是一种在图像中检测圆形的常用技术。在OpenCV中,可以使用cv2.HoughCircles()函数来实现霍夫圆变换。下面是一个简单的演示代码,用于检测红绿灯中的圆形。
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('traffic_light.jpg')
# 将图像从BGR格式转换为HSV格式
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 设定红色和绿色的阈值
lower_red = np.array([0, 50, 50])
upper_red = np.array([10, 255, 255])
lower_green = np.array([50, 50, 50])
upper_green = np.array([70, 255, 255])
# 根据阈值提取红色和绿色区域
mask_red = cv2.inRange(hsv, lower_red, upper_red)
mask_green = cv2.inRange(hsv, lower_green, upper_green)
# 对红色和绿色区域进行中值滤波
mask_red = cv2.medianBlur(mask_red, 5)
mask_green = cv2.medianBlur(mask_green, 5)
# 检测红色和绿色圆形
circles_red = cv2.HoughCircles(mask_red, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)
circles_green = cv2.HoughCircles(mask_green, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)
# 绘制检测到的圆形
if circles_red is not None:
circles_red = np.uint16(np.around(circles_red))
for i in circles_red[0, :]:
cv2.circle(img, (i[0], i[1]), i[2], (0, 0, 255), 2)
if circles_green is not None:
circles_green = np.uint16(np.around(circles_green))
for i in circles_green[0, :]:
cv2.circle(img, (i[0], i[1]), i[2], (0, 255, 0), 2)
# 显示结果
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码中,我们首先将图像从BGR格式转换为HSV格式,然后根据设定的红色和绿色阈值提取红色和绿色区域。接着,我们对红色和绿色区域进行中值滤波,以去除噪声。最后,我们使用cv2.HoughCircles()函数检测红色和绿色圆形,并将检测到的圆形绘制在原始图像上。
阅读全文