使用opencv检测红绿灯
Traffic Light Detection by using opencv
import cv2 import numpy as np
cap = cv2.VideoCapture(0)
while True:
_, frame = cap.read() # frame olarak goruntuyu aldık
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower_yellow = np.array([20,0,0])
upper_yellow = np.array([40,255,255])
mask = cv2.inRange(hsv, lower_yellow, upper_yellow)
res = cv2.bitwise_and(frame,frame, mask= mask)
img = cv2.medianBlur(res, 5)
cimg = cv2.cvtColor(img, cv2.COLOR_HSV2BGR)
cimg = cv2.cvtColor(cimg, cv2.COLOR_BGR2GRAY)
circles = cv2.HoughCircles(cimg, cv2.HOUGH_GRADIENT, 1, 20,
param1=50, param2=30, minRadius=20, maxRadius=30)
circles = np.uint16(np.around(circles))
for i in circles[0, :]:
cv2.circle(cimg, (i[0], i[1]), i[2], (0, 255, 0), 2)
cv2.circle(cimg, (i[0], i[1]), 2, (0, 0, 255), 3)
cv2.imshow('detected circles', cimg)
cv2.imshow('res',res)
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
这是我的代码。我想通过使用图像处理来检测实时流中的交通灯。首先我会检测黄色,然后我会在蒙版图像上找到圆圈。
我认为,错误发生在 HoughCircles 参数处。
但是有一个错误叫做:
错误:回溯(最近调用最后一次):文件“/home/yavuzhan/PythonProgramlama/venv/lib/python3.5/site-packages/numpy/core/fromnumeric.py”,第 52 行,在 _wrapfunc return getattr(obj, 方法) (*args, **kwds) AttributeError: 'NoneType' 对象没有属性 'round'
在处理上述异常的过程中,又发生了一个异常:
回溯(最近调用最后):文件“/media/yavuzhan/DATA/2017-2018/Otonom Araç Projesi/Dosya/Otonom Araç Yazılım/renkalgilama.py”,第 30 行,圆圈 = np.uint16(np.around(圆圈))
你得到 AttributeError: 'None Type' object has no attribute 'round'
因为 circles = cv2.HoughCircles(cimg, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=20, maxRadius=30)
中的 circles
是空的。这是因为 cv2.HoughCircles
没有找到任何圈子。在以后使用它之前,您应该像 if circles is not None
一样检查 circles
。
PS。尝试调整参数,以便 cv2.HoughCircles
找到您可以使用的圈子。并尝试阅读 docs 以自己找出问题所在。
import cv2 import numpy as np
cap = cv2.VideoCapture(0)
while True:
_, frame = cap.read() # frame olarak goruntuyu aldık
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower_yellow = np.array([20,0,0])
upper_yellow = np.array([40,255,255])
mask = cv2.inRange(hsv, lower_yellow, upper_yellow)
res = cv2.bitwise_and(frame,frame, mask= mask)
img = cv2.medianBlur(res, 5)
cimg = cv2.cvtColor(img, cv2.COLOR_HSV2BGR)
cimg = cv2.cvtColor(cimg, cv2.COLOR_BGR2GRAY)
circles = cv2.HoughCircles(cimg, cv2.HOUGH_GRADIENT, 1, 20,
param1=50, param2=30, minRadius=20, maxRadius=30)
circles = np.uint16(np.around(circles))
for i in circles[0, :]:
cv2.circle(cimg, (i[0], i[1]), i[2], (0, 255, 0), 2)
cv2.circle(cimg, (i[0], i[1]), 2, (0, 0, 255), 3)
cv2.imshow('detected circles', cimg)
cv2.imshow('res',res)
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
这是我的代码。我想通过使用图像处理来检测实时流中的交通灯。首先我会检测黄色,然后我会在蒙版图像上找到圆圈。 我认为,错误发生在 HoughCircles 参数处。 但是有一个错误叫做:
错误:回溯(最近调用最后一次):文件“/home/yavuzhan/PythonProgramlama/venv/lib/python3.5/site-packages/numpy/core/fromnumeric.py”,第 52 行,在 _wrapfunc return getattr(obj, 方法) (*args, **kwds) AttributeError: 'NoneType' 对象没有属性 'round'
在处理上述异常的过程中,又发生了一个异常:
回溯(最近调用最后):文件“/media/yavuzhan/DATA/2017-2018/Otonom Araç Projesi/Dosya/Otonom Araç Yazılım/renkalgilama.py”,第 30 行,圆圈 = np.uint16(np.around(圆圈))
你得到 AttributeError: 'None Type' object has no attribute 'round'
因为 circles = cv2.HoughCircles(cimg, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=20, maxRadius=30)
中的 circles
是空的。这是因为 cv2.HoughCircles
没有找到任何圈子。在以后使用它之前,您应该像 if circles is not None
一样检查 circles
。
PS。尝试调整参数,以便 cv2.HoughCircles
找到您可以使用的圈子。并尝试阅读 docs 以自己找出问题所在。