【问题标题】:Traffic Light Detection by using opencv使用opencv进行交通灯检测
【发布时间】:2018-04-19 10:30:29
【问题描述】:
 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 返回 getattr (obj, method)(*args, **kwds) AttributeError: 'NoneType' object has no attribute 'round'

在处理上述异常的过程中,又发生了一个异常:

回溯(最近一次通话最后):文件“/media/yavuzhan/DATA/2017-2018/Otonom Araç Projesi/Dosya/Otonom Araç Yazılım/renkalgilama.py”,第 30 行,圈内 = np.uint16(np .around(圈子))

【问题讨论】:

  • 我认为你应该使用circles = np.round(circles[0, :]).astype("int"),而不是使用circles = np.uint16(np.around(circles))。此外,您还应该检查是否找到任何圈子,使用 if circles is not None
  • 我已经按照你说的做了。但是现在还有另一个错误,称为 Traceback(最近一次调用最后一次):文件“/media/yavuzhan/DATA/2017-2018/Otonom Araç Projesi/Dosya/Otonom Araç Yazılım/renkalgilama.py”,第 29 行,在 circles = np.round(circles[0, :]).astype("int") TypeError: 'NoneType' 对象不可下标
  • 您是否添加了检查是否找到任何圈子?您也可以使用print(len(circles))。另外,cv2.HOUGH_GRADIENT 应该是 cv2.cv.CV_HOUGH_GRADIENT
  • 我查过了。当我将代码(print(type(circles)))放在 circles = np.uint16(np.around(circles)) 之前,它返回 但是,当我把代码放在后面时,它不会return ,因为 circles = np.uint16(np.around(circles)) 代码没有运行。
  • 正如我已经明确提到的,在调用您没有尝试过的circles = np.round(circles[0, :]).astype("int") 之前,使用if circles is not None 检查是否找到了任何圈子。 print(len(circles)) 会告诉你找到了多少个圆圈,在这种情况下似乎为零。它给你NoneType 错误,因为它很可能没有找到任何圈子。如果这不起作用,请尝试调试。

标签: python opencv image-processing hough-transform


【解决方案1】:

你得到了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 没有找到任何圈子。在以后使用之前,您应该检查circles 之类的if circles is not None

PS。尝试调整参数,以便cv2.HoughCircles 找到您可以使用的圈子。并尝试阅读docs 以自己查明问题。

【讨论】:

  • 谢谢你们。问题已经解决了 。我已经做了瑞克所说的:) 再次。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-05-05
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2020-06-17
  • 2012-06-14
相关资源
最近更新 更多