OpenCV霍夫圆变换cv2.HoughCircles()
admin
2023-05-02 11:20:18
目录

    这篇博客将学习如何使用霍夫圆变换在图像中找到圆圈,OpenCV使用cv2.HoughCircles()实现霍夫圆变换。

    circles = cv2.HoughCircles(img,
    cv2.HOUGH_GRADIENT, 1, 20,
    param1=50, param2=40, minRadius=25, maxRadius=0)

    img: 待检测的灰度图cv2.HOUGH_GRADIENT:检测的方法,霍夫梯度1:检测的圆与原始图像具有相同的大小,dp=2,检测的圆是原始图像的一半20:检测到的相邻圆的中心的最小距离(如果参数太小,除了一个真实的圆外,还可能会错误地检测到多个相邻圆。如果太大,可能会漏掉一些圆。)param1:在#HOUGHŠu梯度的情况下,它是较高的. 两个阈值传递到Canny边缘检测器(较低的一个小两倍)。param2:在#HOUGHŠu梯度的情况下,它是检测阶段圆心的累加器阈值。它越小,就越可能检测到假圆;minRadius:最小圆半径maxRadius:最大圆半径,如果<=0,则使用最大图像尺寸。如果<0,则返回没有找到半径的中心。

    1. 效果图

    原始图 VS 检测圆效果图如下:

    如下右图可以看到3个外侧圆绿色,圆心红色被成功检测到;

    圆的最小半径设置由25调整为10,也可能会错误的检测到圆,效果图如下:

    检测圆半径的阈值(param2设置35)的结果,最小圆半径设置10,也可能会错误的检测到圆,效果图如下:

    2. 源码

    # 霍夫圆检测
    
    import cv2
    import numpy as np
    
    cimg = cv2.imread('opencv_logo_350.jpg')
    cv2.imshow("origin", cimg)
    cv2.waitKey(0)
    img = cv2.cvtColor(cimg,cv2.COLOR_BGR2GRAY)
    img = cv2.medianBlur(img, 5)
    cimg = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
    
    # - img: 待检测的灰度图
    # - cv2.HOUGH_GRADIENT:检测的方法,霍夫梯度
    # - 1:检测的圆与原始图像具有相同的大小,dp=2,检测的圆是原始图像的一半
    # - 20:检测到的圆的中心的最小距离(如果参数为太小,除了一个真实的圆外,还可能会错误地检测到多个相邻圆。如果太大,可能会漏掉一些圆。)
    # - param1:在#HOUGHŠu梯度的情况下,它是较高的. 两个阈值传递到Canny边缘检测器(较低的一个小两倍)。
    # - param2:在#HOUGHŠu梯度的情况下,它是检测阶段圆心的累加器阈值。它越小,就越可能检测到假圆;
    # - minRadius:最小圆半径,也可能会检测到假圆
    # - maxRadius:最大圆半径,如果<=0,则使用最大图像尺寸。如果<0,则返回没有找到半径的中心。
    circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 20,
                               param1=50, param2=40, minRadius=0, maxRadius=0)
    # 最小圆半径设置不合适,也可能会检测到假圆
    # circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 20,
    #                            param1=50, param2=40, minRadius=0, maxRadius=0)
    # circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 20,
    #                            param1=50, param2=30, minRadius=10, maxRadius=0)
    
    circles = np.uint16(np.around(circles))
    
    print(len(circles))
    print(circles)
    for i in circles[0, :]:
        # 绘制外圈圆(蓝色)
        cv2.circle(cimg, (i[0], i[1]), i[2], (0, 255, 0), 2)
    
        # 绘制圆心(红色)
        cv2.circle(cimg, (i[0], i[1]), 2, (0, 0, 255), 3)
    
    cv2.imshow('detected circles', cimg)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    参考

    https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_houghcircles/py_houghcircles.html#hough-circles

    到此这篇关于OpenCV霍夫圆变换cv2.HoughCircles()的文章就介绍到这了,更多相关OpenCV霍夫圆变换内容请搜索趣讯吧以前的文章或继续浏览下面的相关文章希望大家以后多多支持趣讯吧!

    相关内容

    热门资讯

    北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
    苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
    长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
    demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
    世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
    长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
    脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
    猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
    北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
    苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
    世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
    应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
    阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
    脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
    demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
    北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
    苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
    长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...