OpenCV Hough Circle Transform needs 8-bit image

谁说我不能喝 提交于 2019-12-25 07:28:34

问题


I am working with Hough Circle Transform with my RaspberryPi and when I take a ROI to check for circle like this:

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"

I get this error

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

How can I transform the ROI to become an 8-bit image or does the error mean something else

Thank you in Advance!

Edit:


回答1:


Thank you Miki and bpachev for the help!

The first error means that you need to convert it to grayscale like this

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

And the NoneType error means that no circles were found so to advoid the error you can add this if statement

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

Then since no circles were found where I knew there were circles I had to play around with the settings of the detector.



来源:https://stackoverflow.com/questions/38648387/opencv-hough-circle-transform-needs-8-bit-image

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!