【问题标题】:OpenCV Hough Circle Transform needs 8-bit imageOpenCV 霍​​夫圆变换需要 8 位图像
【发布时间】:2016-12-03 13:19:42
【问题描述】:

我正在使用我的 RaspberryPi 使用 Hough Circle Transform,当我使用 ROI 来检查这样的圆圈时:

for (x,y,w,h) in trafficLights:
    cv2.rectangle(image,(x,y),(x+w,y+h),(0,0,255),2)
    roi = image[y:y+h,x:x+w]
    roi = cv2.medianBlur(roi,5)

    circles = cv2.HoughCircles(roi,cv2.HOUGH_GRADIENT,1,20,
                       param1=50,param2=60,minRadius=0,maxRadius=0)
    circles = numpy.uint16(numpy.around(circles))

    for i in circles[0,:]:
        if i[2] < 100:
            cv2.circle(image,(i[0],i[1]),i[2],(0,255,0),2)
            cv2.circle(image,(i[0],i[1]),2,(0,0,255),3)
            if i[1] > 315:
                print "Green Light"
            else:
                print "Red Light"

我收到此错误

The source image must be 8-bit, single-channel in function cvHoughCircles

如何将 ROI 转换为 8 位图像或错误是否意味着其他原因

提前感谢您!

编辑:

【问题讨论】:

  • 您可以将image 转换为灰度。使用cv2.cvtColor(..., COLOR_BGR2GRAY)
  • @Miki 当我使用灰度图像时,它给了我另一个错误,我用图片更新了我的问题。
  • @Miki 仍然给出同样的错误。
  • 您收到 NoneType 错误。我敢打赌,问题是圆圈是无的。这可能是因为您没有找到任何圈子。

标签: python opencv numpy channel hough-transform


【解决方案1】:

感谢 Miki 和 bpachev 的帮助!

第一个错误表示需要像这样转成灰度

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 

NoneType 错误意味着没有找到圆圈,所以为了避免错误,你可以添加这个 if 语句

if circles is not None:
    circles = numpy.round(circles[0, :]).astype("int")

然后,由于在我知道有圆圈的地方没有找到圆圈,所以我不得不调整检测器的设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多