您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python OpenCV基于霍夫圈变换算法检测图像中的圆形

51自学网 2022-02-21 10:44:50
  python
这篇教程Python OpenCV基于霍夫圈变换算法检测图像中的圆形写得很实用,希望能帮到您。

第一章:霍夫变换检测圆

① 实例演示1

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

② 实例演示2

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

③ 霍夫变换函数解析

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基于霍夫圈变换算法检测图像中的圆形的文章就介绍到这了,更多相关OpenCV霍夫圈变换算法检测圆形内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


基于Opencv图像识别实现答题卡识别示例详解
用Python实现流星雨效果的方法详解
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。