Detecting colored circle and it's center using OpenCV

后端 未结 2 933
半阙折子戏
半阙折子戏 2021-01-24 03:19

I am trying to detect BLUE colored CIRCLE and it\'s CENTER. Then draw a circle on the detected circle and a very small circle on it\'s center. But I get a few errors. (I am usin

相关标签:
2条回答
  • 2021-01-24 04:01

    Change frame, _ = cap.read() to ret,frame = cap.read()

    import cv2
    import numpy as np
    
    cap = cv2.VideoCapture(0)
    if cap.isOpened():
    while(True):
        ret,frame= cap.read()
        # blurring the frame that's captured
        frame_gau_blur = cv2.GaussianBlur(frame, (3, 3), 0)
        # converting BGR to HSV
        hsv = cv2.cvtColor(frame_gau_blur, cv2.COLOR_BGR2HSV)
        # the range of blue color in HSV
        lower_blue = np.array([110, 50, 50])
        higher_blue = np.array([130, 255, 255])
        # getting the range of blue color in frame
        blue_range = cv2.inRange(hsv, lower_blue, higher_blue)
        # getting the V channel which is the gray channel
        blue_s_gray = blue_range[::2]
        # applying HoughCircles
        circles = cv2.HoughCircles(blue_s_gray, cv2.HOUGH_GRADIENT, 1, 10, 100, 30, 5, 50)
        circles = np.uint16(np.around(circles))
        for i in circles[0,:]:
            # drawing on detected circle and its center
            cv2.circle(frame,(i[0],i[1]),i[2],(0,255,0),2)
            cv2.circle(frame,(i[0],i[1]),2,(0,0,255),3)
        cv2.imshow('circles', frame)
        k = cv2.waitKey(5) & 0xFF
        if k == 27:
            break
    cv2.destroyAllWindows()
    
    0 讨论(0)
  • 2021-01-24 04:07

    I have solved the my problem and after looking up the meanings of the errors online (the one's that I got), I was able to find the solutions for them and hence I was able to solve them. If you run the following code given below you should be able to detect blue circles pretty well. Thanks a lot to the people who tried to help me to solve my problem.

    The code is given below:

    import cv2
    import numpy as np
    
    cap = cv2.VideoCapture(0)
    if cap.isOpened():
        while(True):
            ret, frame = cap.read()
            # blurring the frame that's captured
            frame_gau_blur = cv2.GaussianBlur(frame, (3, 3), 0)
            # converting BGR to HSV
            hsv = cv2.cvtColor(frame_gau_blur, cv2.COLOR_BGR2HSV)
            # the range of blue color in HSV
            lower_blue = np.array([110, 50, 50])
            higher_blue = np.array([130, 255, 255])
            # getting the range of blue color in frame
            blue_range = cv2.inRange(hsv, lower_blue, higher_blue)
            res_blue = cv2.bitwise_and(frame_gau_blur,frame_gau_blur, mask=blue_range)
            blue_s_gray = cv2.cvtColor(res_blue, cv2.COLOR_BGR2GRAY)
            canny_edge = cv2.Canny(blue_s_gray, 50, 240)
            # applying HoughCircles
            circles = cv2.HoughCircles(canny_edge, cv2.HOUGH_GRADIENT, dp=1, minDist=10, param1=10, param2=20, minRadius=100, maxRadius=120)
            cir_cen = []
            if circles != None:
                # circles = np.uint16(np.around(circles))
                for i in circles[0,:]:
                    # drawing on detected circle and its center
                    cv2.circle(frame,(i[0],i[1]),i[2],(0,255,0),2)
                    cv2.circle(frame,(i[0],i[1]),2,(0,0,255),3)
                    cir_cen.append((i[0],i[1]))
            print cir_cen
            cv2.imshow('circles', frame)
            cv2.imshow('gray', blue_s_gray)
            cv2.imshow('canny', canny_edge)
            k = cv2.waitKey(5) & 0xFF
            if k == 27:
                break
        cv2.destroyAllWindows()
    else:
        print 'no cam'
    
    0 讨论(0)
提交回复
热议问题