iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python OpenCV基于霍夫圈变换算法如何检测图像中的圆形
  • 952
分享到

Python OpenCV基于霍夫圈变换算法如何检测图像中的圆形

2023-06-22 04:06:54 952人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

小编给大家分享一下python OpenCV基于霍夫圈变换算法如何检测图像中的圆形,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!第一章:霍夫变换检测圆①

小编给大家分享一下python OpenCV基于霍夫圈变换算法如何检测图像中的圆形,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

第一章:霍夫变换检测圆

① 实例演示1

这个是设定半径范围 0-50 后的效果。

Python OpenCV基于霍夫圈变换算法如何检测图像中的圆形

② 实例演示2

这个是设定半径范围 50-70 后的效果,因为原图稍微大一点,半径也大了一些。

Python OpenCV基于霍夫圈变换算法如何检测图像中的圆形

③ 霍夫变换函数解析

cv.HoughCircles() 方法

参数分别为:image、method、dp、minDist、param1、param2、minRadius、maxRadius

其中:

  • image 为灰度图像;

  • method 使用的方法为霍夫梯度法,目前已知的有 HOUGH_GRADIENT 和 HOUGH_GRADIENT_ALT 两种,后者的准确率会更高一点;

  • dp 为累加器分辨率与图片分辨率的反比。

  • minDist 为两个圆中心的最小距离;

  • param1 对于 CV_HOUGH_GRADIENT 表示传入 canny 边缘检测的阈值;

  • param2 对于 CV_HOUGH_GRADIENT 表示检测阶段圆心的累加阈值,值越小能检测出的圆越多,值越大的话就检测出来的少,但是检测出来的圆形相比于没检测出来的会更圆、更完美一些;

  • minRadius 为最小半径;

  • minRadius 为最大半径;

首先通过均值偏移滤波降噪来排除干扰的点,提高识别的准确率,然后进行灰度处理。

# 均值偏移滤波降噪处理mean_filter_img = cv.pyrMeanShiftFiltering(image, 10, 100)cv.imshow("mean_filter_img", mean_filter_img)# 图像灰度处理gray_img = cv.cvtColor(mean_filter_img, cv.COLOR_BGR2GRAY)# 霍夫圈变换# 参数分别为:image, method, dp, minDist, param1, param2, minRadius, maxRadius# 其中:image为灰度图像,method使用的方法为霍夫梯度法,minDist两个圆中心的最小距离circles = cv.HoughCircles(gray_img, cv.HOUGH_GRADIENT, 1, 30, param1=50, param2=30, minRadius=0, maxRadius=50)

第二章:Python + opencv 完整检测代码

① 源代码

# -*- coding:utf-8 -*-# 2021-12-17# 作者:小蓝枣# opencv圆形检测import cv2 as cvimport numpy as npdef detect_circle(image):    '''     作用:圆形检测     参数:需要检测圆的图片     返回:检测出圆形的信息    '''    # 均值偏移滤波降噪处理    mean_filter_img = cv.pyrMeanShiftFiltering(image, 10, 100)    cv.imshow("mean_filter_img", mean_filter_img)        # 图像灰度处理    gray_img = cv.cvtColor(mean_filter_img, cv.COLOR_BGR2GRAY)        # 霍夫圈变换    # 参数分别为:image, method, dp, minDist, param1, param2, minRadius, maxRadius    # 其中:image为灰度图像,method使用的方法为霍夫梯度法,minDist两个圆中心的最小距离    circles = cv.HoughCircles(gray_img, cv.HOUGH_GRADIENT, 1, 30, param1=50, param2=30, minRadius=0, maxRadius=50)        # 对数据进行取整    print("取整前信息:" + str(circles))    circles = np.uint16(np.around(circles))    print("取整后信息:" + str(circles))        return circles    def draw_circle(img, circles):    '''     作用:根据圆形信息在图片中绘制圆     参数1:原始图片信息     参数2:圆形坐标信息     返回:无    '''    for i in circles[0, :]:        # 绘制圆外圈        # 参数分别为:圆心、半径、颜色、线框宽度        cv.circle(img, (i[0], i[1]), i[2], (0, 0, 255), 2)        # 绘制圆心         cv.circle(img, (i[0], i[1]), 2, (255, 0, 0), 2)    cv.imshow("draw_circle_img", img)# 读取图片信息img = cv.imread("./image/meixi.jpg")# 设置窗口不可改变大小(参数包含:WINDOW_AUTOSIZE、WINDOW_NORMAL、WINDOW_OPENGL)cv.namedWindow("original image", cv.WINDOW_AUTOSIZE)cv.imshow("original image", img)# 检测圆circles = detect_circle(img)#绘制圆draw_circle(img, circles)cv.waiTKEy(0)cv.destroyAllwindows()

② 运行效果图

原始图片:

Python OpenCV基于霍夫圈变换算法如何检测图像中的圆形

降噪后效果:

Python OpenCV基于霍夫圈变换算法如何检测图像中的圆形

霍夫变换检测圆处理后效果:

Python OpenCV基于霍夫圈变换算法如何检测图像中的圆形

取整后效果图:

Python OpenCV基于霍夫圈变换算法如何检测图像中的圆形

以上是“Python OpenCV基于霍夫圈变换算法如何检测图像中的圆形”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网Python频道!

--结束END--

本文标题: Python OpenCV基于霍夫圈变换算法如何检测图像中的圆形

本文链接: https://www.lsjlt.com/news/302329.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python OpenCV基于霍夫圈变换算法如何检测图像中的圆形
    小编给大家分享一下Python OpenCV基于霍夫圈变换算法如何检测图像中的圆形,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!第一章:霍夫变换检测圆①...
    99+
    2023-06-22
  • PythonOpenCV基于霍夫圈变换算法检测图像中的圆形
    目录第一章:霍夫变换检测圆① 实例演示1② 实例演示2③ 霍夫变换函数解析第二章:Python + opencv 完整检测代码① 源代码② 运行效果图第一章:霍夫变换检测圆 ① 实例...
    99+
    2024-04-02
  • 如何基于OpenCV&Python实现霍夫变换圆形检测
    简述 基于python使用opencv实现在一张图片中检测出圆形,并且根据坐标和半径标记出圆。不涉及理论,只讲应用。 霍夫变换检测圆形的原理 其实检测圆形和检测直线的原理差别不大...
    99+
    2024-04-02
  • Python中图像边缘检测算法如何实现
    这篇“Python中图像边缘检测算法如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python中图像边缘检测算法如何...
    99+
    2023-06-30
  • 如何基于Python实现图像的傅里叶变换
    这篇文章主要介绍了如何基于Python实现图像的傅里叶变换,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言首先是本文总体代码,改一下图像的读取路径就可以运行了,但我还是建议...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作