热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

c/c++开发分享OpenCV霍夫圆变换cv2.HoughCircles()

目录这篇博客将学习如何使用霍夫圆变换在图像中找到圆圈,opencv使用cv2.houghcircles()实现霍夫圆变换。circlescv2.houghcircles(im
目录

这篇博客将学习如何使用霍夫圆变换在图像中找到圆圈,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,则返回没有找到半径的中心。

%ignore_a_1%

1. 效果图

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

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

OpenCV霍夫圆变换cv2.HoughCircles()

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

OpenCV霍夫圆变换cv2.HoughCircles()

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

OpenCV霍夫圆变换cv2.HoughCircles()

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()  

参考

到此这篇关于opencv霍夫圆变换cv2.houghcircles()的文章就介绍到这了,更多相关opencv霍夫圆变换内容请搜索<编程笔记>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<编程笔记>!

需要了解更多c/c++开发分享OpenCV霍夫圆变换cv2.HoughCircles(),都可以关注C/C++技术分享栏目—编程笔记


推荐阅读
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Principle for Mac(交互式屏幕设计软件)免激活版
    Mac上好用的交互式屏幕设计软件,PrincipleforMac是一款交互式屏幕设计软件,principle mac让您的设计将以原则出现,随时为您注入新的活力。如果您进行更改,再 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在Pygame中使用矩形对表面进行涂色的方法。通过查阅Pygame文档中的blit函数,可以了解到如何将一个表面的特定部分复制到另一个表面的指定位置上。具体的解决方法和参数说明在文中都有详细说明。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
author-avatar
Chickny的造梦空间
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有