当前位置: 首页 > 知识库问答 >
问题:

利用OpenCV检测彩色圆及其中心

漆雕彬彬
2023-03-14

我正在尝试检测蓝色的圆圈和它的中心。然后在检测到的圆上画一个圆,在它的中心画一个很小的圆。但我有几个错误。(我使用OpenCV 3.1.0、Python 2.7 Anaconda 64位、PyCharm作为IDE)(请帮助我使用Python代码)我运行以下代码:

  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"

共有1个答案

令狐辉
2023-03-14

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

代码如下:

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 2.4.1软件包随附的Tutorial 2-Basic作为起点,使用Android版OpenCV检测椭圆。请注意,我的椭圆将是一个完美的photoshop之一。 据我了解,使用“ HoughCircles”只会找到完美的(或大约)圆,因此省略了椭圆。 任何帮助将不胜感激,因为我是OpenCV的初学者 到目前为止,这是我尝试过的 如果您认为更多信息可能有用,请告诉我

  • 在OpenCV中,可以使用类的方法将不同的颜色贴图应用于图像。以下是这种方法的语法 - 该方法接受以下参数 - src - 表示此操作的源(输入图像)的对象。 dst - 表示此操作的目标(输出图像)的对象。 colormap - 表示要应用的颜色映射的类型的整数类型变量。 示例 以下程序演示了如何将彩色映射应用于图像。 假定以下是上述程序中指定的输入图像:。 执行上面示例代码,得到以下结果 -

  • 我尝试过各种演示代码,如“opencv查找:轮廓”,模板匹配(效果不好,因为它无法检测到顶盖的旋转) 我发现最好的方法是将Canny边缘检测和Hough变换圆相结合,这样Canny边缘检测的输出结果可以是Hough变换圆的输入图像,结果如下。 不幸的是,并非所有圆圈都被检测到,如果我更改

  • 本文向大家介绍利用Opencv中Houghline方法实现直线检测,包括了利用Opencv中Houghline方法实现直线检测的使用技巧和注意事项,需要的朋友参考一下 利用Opencv中的Houghline方法进行直线检测—python语言 这是给Python部落翻译的文章,请在这里看原文。 在图像处理中,霍夫变换用来检测任意能够用数学公式表达的形状,即使这个形状被破坏或者有点扭曲。 下面我们将看

  • 本文向大家介绍Opencv+Python 色彩通道拆分及合并的示例,包括了Opencv+Python 色彩通道拆分及合并的示例的使用技巧和注意事项,需要的朋友参考一下 一、图像色彩通道拆分 B通道图: G通道图: R通道图: 二、图像色彩通道合并 按RGB合并后图: 以上这篇Opencv+Python 色彩通道拆分及合并的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持

  • 主要内容:将彩色图像转换为灰度在前面的章节中,我们讨论了如何读取不同类型的输入图像(二进制,灰度,BGR等)。 在本章中,我们将学习如何将一种图像转换为另一种图像。 包中名为的类提供了将图像从一种颜色转换为另一种颜色的方法。 将彩色图像转换为灰度 使用方法将彩色图像转换为灰度。 以下是此方法的语法。 该方法接受以下参数 - src - 表示来源的矩阵。 dst - 表示目的地的矩阵。 code - 表示转换类型的整数代码,例如