zoukankan      html  css  js  c++  java
  • OpenCV---圆检测

     推文:Opencv2.4.9源码分析——HoughCircles

     

     霍夫圆检测

    加载一幅图像并对其模糊化以降噪
    对模糊化后的图像执行霍夫圆变换 .
    在窗体中显示检测到的圆.
    def detect_circle_demo(image):
        # dst = cv.bilateralFilter(image, 0, 150, 5)  #高斯双边模糊,不太好调节,霍夫噪声敏感,所以要先消除噪声
        # cv.imshow("1",dst)
        # dst = cv.pyrMeanShiftFiltering(image,5,100)  #均值迁移,EPT边缘保留滤波,霍夫噪声敏感,所以要先消除噪声
        # cv.imshow("2", dst)
        dst = cv.GaussianBlur(image,(13,15),15) #使用高斯模糊,修改卷积核ksize也可以检测出来
        # cv.imshow("3", dst)
        gray = cv.cvtColor(dst,cv.COLOR_BGR2GRAY)
        circles = cv.HoughCircles(gray,cv.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0)
        circles = np.uint16(np.around(circles))  #around对数据四舍五入,为整数
        for i in circles[0,:]:
            cv.circle(image,(i[0],i[1]),i[2],(0,0,255),2)
            cv.circle(image,(i[0],i[1]),2,(255,0,0),2)   #圆心
    
        cv.imshow("detect_circle_demo",image)
    
    src = cv.imread("./c.png")  #读取图片
    cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #创建GUI窗口,形式为自适应
    cv.imshow("input image",src)    #通过名字将图像和窗口联系
    
    detect_circle_demo(src)
    
    cv.waitKey(0)   #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
    cv.destroyAllWindows()  #销毁所有窗口

    相关知识补充:

    (一)HoughCircles方法

    1.加载一幅图像
    2.执行高斯模糊以降低噪声:GaussianBlur
    3.转成灰度图:cvtColor
    4.执行霍夫圆变换:HoughCircles
    def HoughCircles(image, method, dp, minDist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None): # real signature unknown; restored from __doc__
    cv.HoughCircles(gray,cv.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0)
    1.image:输入图像 (灰度图)
    2.method:指定检测方法. 现在OpenCV中只有霍夫梯度法
    3.dp:累加器图像的反比分辨=1即可默认
    4.minDist = src_gray.rows/8: 检测到圆心之间的最小距离,这是一个经验值。这个大了,那么多个圆就是被认为一个圆。
    5.param_1 = 200: Canny边缘函数的高阈值
    6.param_2 = 100: 圆心检测阈值.根据你的图像中的圆大小设置,当这张图片中的圆越小,那么此值就设置应该被设置越小。当设置的越小,那么检测出的圆越多,在检测较大的圆时则会产生很多噪声。所以要根据检测圆的大小变化。
    7.min_radius = 0: 能检测到的最小圆半径, 默认为0.
    8.max_radius = 0: 能检测到的最大圆半径, 默认为0
  • 相关阅读:
    第十三周课程总结
    第十二周
    第十一周课程总结
    第十周课程总结
    第九周课程总结&实验报告(七)
    第八周课程总结&实验报告(六)
    第七周课程总结&实验报告(五)
    第六周&java实验报告四
    期末课程总结与个人总结
    第十四周课程总结
  • 原文地址:https://www.cnblogs.com/ssyfj/p/9275977.html
Copyright © 2011-2022 走看看