使用OpenCV检测彩色圆圈及其中心 [英] Detecting colored circle and it's center using OpenCV

查看:134
本文介绍了使用OpenCV检测彩色圆圈及其中心的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试检测蓝色的圆形,它是CENTER。然后在检测到的圆上画一个圆,并在其中心上画一个很小的圆。但是我遇到了一些错误。 (我正在使用OpenCV 3.1.0,Python 2.7 Anaconda 64位,PyCharm作为IDE)(请使用python代码帮助我)
我运行以下代码:

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 using OpenCV 3.1.0, Python 2.7 Anaconda 64 bits, PyCharm as an IDE) (Please help me using python codes) I run the following code:

import cv2
import numpy as np

cap = cv2.VideoCapture(0)
if cap.isOpened():
    while(True):
        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()
else:
    print "Can't find camera"

运行代码时遇到的错误是:

The error I get when I run the code is:


OpenCV错误:断言失败(深度== CV_8U ||深度== CV_16U ||深度== CV_32F)在cv :: cvtColor中,文件C:\builds\master_PackSlaveAddon-win64-vc12-static\ \opencv\modules\imgproc\src\color.cpp,行7935
回溯(最近一次调用):
文件 C:/ Users / Meliodas / PycharmProjects / OpenCV_By_Examples / code_tester。 py,第11行,在
hsv = cv2.cvtColor(frame_gau_blur,cv2.COLOR_BGR2HSV)
cv2.error:C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\ modules\imgproc\src\color.cpp:7935:错误:(-215)深度== CV_8U ||深度== CV_16U ||深度==函数cv :: cvtColor

OpenCV Error: Assertion failed (depth == CV_8U || depth == CV_16U || depth == CV_32F) in cv::cvtColor, file C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\imgproc\src\color.cpp, line 7935 Traceback (most recent call last): File "C:/Users/Meliodas/PycharmProjects/OpenCV_By_Examples/code_tester.py", line 11, in hsv = cv2.cvtColor(frame_gau_blur, cv2.COLOR_BGR2HSV) cv2.error: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\imgproc\src\color.cpp:7935: error: (-215) depth == CV_8U || depth == CV_16U || depth == CV_32F in function cv::cvtColor

在此先感谢您的帮助!

推荐答案

我已经解决了我的问题,并在网上查找了错误的含义(发现的错误)之后,便能够找到解决方案因此,我能够解决它们。如果运行下面给出的以下代码,您应该能够很好地检测到蓝色圆圈。非常感谢那些试图帮助我解决问题的人们。

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.

代码如下:

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'

这篇关于使用OpenCV检测彩色圆圈及其中心的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆