1
votes

I'm using opencv 3.1 in RaspberryPi 3. I,m trying to run the following Hough Circle detection algorithm

#! /usr/bin/python
import numpy as np
import cv2
from cv2 import cv

VInstance = cv2.VideoCapture(0)
key = True


"""
params = dict(dp,
              minDist,
              circles,
              param1,
              param2,
              minRadius,
              maxRadius)
"""
def draw_circles(circles, output):

    if circles is not None:

        for i in circles[0,:]:
            #draw the outer circle
            cv2.circle(output,(i[0],i[1]),i[2],(0,255,0),2)
            #draw the centre of the circle
            cv2.circle(output,(i[0],i[1]),2,(0,0,255),3)
            print("The number of circles if %d" %(circles[0].shape[0]))      
    elif circles is None:
        print ("The number of circles is 0")

if __name__ == '__main__':

    while key:
        ret,img = VInstance.read()
        ## Smooth image to reduce the input noise

        imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        imgSmooth = cv2.GaussianBlur(imgGray,(5,5),3)

        ## Compute Hough Circles
        circles = cv2.HoughCircles(imgSmooth,cv2.cv.CV_HOUGH_GRADIENT,1,100,
                                   param1=80,
                                   param2=50,
                                   minRadius=50,
                                   maxRadius=100)
        draw_circles(circles,img)

        ## Display the circles
        cv2.imshow('detected circles',imgGray)
        cv2.imshow("result",img)
        k = cv2.waitKey(1)
        if k == 27:
            cv2.destroyAllWindows()
            break

But I'm getting Assertion Failed error, details are below.

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /home/pi/opencv-3.1.0/modules/imgproc/src/color.cpp, line 8000 Traceback (most recent call last): File "HoughCircles.py", line 70, in imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) cv2.error: /home/pi/opencv-3.1.0/modules/imgproc/src/color.cpp:8000: error: (-215) scn == 3 || scn == 4 in function cvtColor

Can anyone please check and help!

2

2 Answers

1
votes

Error code "Assertion failed (scn == 3 || scn == 4) in cvtColor" means that the input (source) image in your cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) method does not have 3 or 4 channels, which are necessary for this type of conversion. Probably your input image is already grayscale format. Try just not to use that method and your problem should be solved. If it does throw other unsolvable errors or does not solve the problem, post your issues in comments.

1
votes

This means the input image is invalid, which is why you need to check the ret value in your loop!

The error and question title doesn't have anything to do with your Hough circles, so I'll condense my answer to address the assertion failure (add back in your stuff later!):

#!/usr/bin/python
import numpy as np
import cv2

VInstance = cv2.VideoCapture(0)

if __name__ == '__main__':

    while True:
        ret,img = VInstance.read()

        # Confirm we have a valid image returned
        if not ret:
            break

        imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

        cv2.imshow("result",img)

        k = cv2.waitKey(1)
        if k == 27:
            break

    cv2.destroyAllWindows()