霍夫变换检测硬币示例——openv-python

简介: 霍夫变换检测硬币示例——openv-python

前言


在这里我们不硬啃原理(原理可参考Opencv[人民邮电出版社出版])。




一 霍夫检测原理-圆形检测


    霍夫变换检测圆形和直线相似,都是将图像空间x-y直角坐标系中的像素投影到参数空间中,之后寻找交点。

HoughCircles(InputArray image,
  OutputArray circles,
  int method,
  double dp,
  double minDist,
  double param1 = 100,
  double param2 = 100,
  int minRadius = 0, 
  int maxRadius = 0);


image: 输入图像,必须是CV-8U的单通道图像。


circles:  检测圆的输出量,每个圆用三个参数表示,分别为:圆心坐标(x,y)、圆的半径(r)


method:  检测圆的方法标志,支持Hough_GRADIENT


dp:  离散化时分辨率与图像分辨率的反比


minDist:  圆心之间的最小距离,如果太小多个相邻圆可能被错误的检测成一个重合圆。如果太大,某些圆可能检测不出来。


param1:  使用Hough_GRADIENT方法检测圆时,传递给Canny边缘检测器的两个阈值的较大值


param2:  使用Hough_GRADIENT方法检测圆时,检测圆形的累加器阈值,阈值越大则检测圆形越精确


minRadius:  检测圆的最小圆半径


maxRadius:  检测圆的最大圆半径\


二.动手开撸


开撸之前的准备工作:我们拿倒图像后,先检查是三通道还是单通道,三通道则转单通道,接下来就需要传统的滤波降噪等操作的处理,这样是为了剔除不必要的干扰.


示例图像:


beecbbcb250bb88dd3f7b983db805e6.png


进行边缘检测处理


这一步没啥好说的,都是一些基础的操作

img = cv2.imread('4.jpg')
# 将图像转换为灰度图像
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 高斯滤波降噪
gaussian_img = cv2.GaussianBlur(gray_img, (7, 7), 0)
# 利用Canny进行边缘检测
edges_img = cv2.Canny(gaussian_img, 80, 180, apertureSize=3)

image.png


进行检测圆


在检测圆的过程中需要注意这个例图中圆的半径有大有小,圆与圆之间的距离也都不一样,我们需要调整minRadiusmaxRadius确定能把所有圆检测出来,确定了能检测所有圆后为了避免乱画圆,就需要调整minDist。 (大家可以自行更改参数进行优化)


# 自动检测圆
circles1 = cv2.HoughCircles(edges_img, cv2.HOUGH_GRADIENT, 1, 100, param1=300, param2=10, minRadius=5, maxRadius=95)
circles = circles1[0, :, :]
circles = np.uint16(np.around(circles))
for i in circles[:]:
    cv2.circle(img, (i[0], i[1]), i[2], (0, 0, 255), 2)
cv2.imshow('img', edges_img)
cv2.waitKey(0)
cv2.destroyAllWindows()


image.png


完整DEMO:


import cv2
import numpy as np
img = cv2.imread('4.jpg')
# 将图像转换为灰度图像
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 高斯滤波降噪
gaussian_img = cv2.GaussianBlur(gray_img, (7, 7), 0)
# 利用Canny进行边缘检测
edges_img = cv2.Canny(gaussian_img, 80, 180, apertureSize=3)
# 自动检测圆
circles1 = cv2.HoughCircles(edges_img, cv2.HOUGH_GRADIENT, 1, 100, param1=300, param2=10, minRadius=5, maxRadius=95)
circles = circles1[0, :, :]
circles = np.uint16(np.around(circles))
for i in circles[:]:
    cv2.circle(img, (i[0], i[1]), i[2], (0, 0, 255), 2)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()


相关文章
|
6天前
|
Ubuntu C++ Docker
Docker的基本指令和HTML/PYTHON/C++的简单创建示例
Docker的基本指令和HTML/PYTHON/C++的简单创建示例
|
9天前
|
机器学习/深度学习 调度 Python
SOFTS: 时间序列预测的最新模型以及Python使用示例
这是2024年4月《SOFTS: Efficient Multivariate Time Series Forecasting with Series-Core Fusion》中提出的新模型,采用集中策略来学习不同序列之间的交互,从而在多变量预测任务中获得最先进的性能。
32 4
|
2天前
|
人工智能 数据挖掘 大数据
538个代码示例!麻省理工教授的Python程序设计+人工智能案例实践
Python简单易学,且提供了丰富的第三方库,可以用较少的代码完成较多的工作,使开发者能够专注于如何解决问题而只花较少的时间去考虑如何编程。 此外,Python还具有免费开源、跨平台、面向对象、胶水语言等优点,在系统编程、图形界面开发、科学计算、Web开发、数据分析、人工智能等方面有广泛应用。 尤其是在数据分析和人工智能方面,Python已成为最受开发者欢迎的编程语言之一,不仅大量计算机专业人员选择使用Python进行快速开发,许多非计算机专业人员也纷纷选择Python语言来解决专业问题。 由于Python应用广泛,关于Python的参考书目前已经有很多,但将Python编程与数据分析、人工智
|
5天前
|
编译器 索引 Python
Python常见异常类型说明及触发代码示例
开发过程中需要根据具体情况选择处理异常,并使用try-except语句来捕获并处理异常,从而保证程序的健壮性和稳定性。在Python中,异常是程序执行期间发生的错误或意外情况。当解释器遇到异常时,会停止程序的正常执行,并在控制台输出异常的相关信息。Python中有许多不同的异常类型,每个异常类型表示不同的错误或意外情况。OSError:操作系统产生的异常(例如打开一个不存在的文件)。AttributeError:尝试访问一个对象没有的属性。UnicodeError:Unicode相关的异常。
13 5
|
5天前
|
设计模式 开发者 Python
深入理解Python适配器模式及其应用示例
在软件开发中,适配器模式是一种常用的设计模式,它可以帮助我们解决不兼容的接口或类之间的问题。通过适配器模式,我们可以简化不兼容接口之间的调用,并提高代码的复用性和可维护性。这两个支付接口具有不同的接口定义和调用方式,为了屏蔽这种差异性并实现统一的支付接口,可以使用适配器模式来完成。通过适配器模式,我们成功地将支付宝和微信支付的接口适配到了统一的支付接口上,实现了支付系统的可扩展性和灵活性。适配器模式的核心思想是创建一个中间层,将不同的接口进行适配,使得接口之间可以无缝衔接并协同工作。
12 2
|
11天前
|
机器学习/深度学习 存储 编解码
基于YOLOv8与ByteTrack的车辆检测追踪与流量计数系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标追踪、车辆检测追踪、过线计数、流量统计(2)
基于YOLOv8与ByteTrack的车辆检测追踪与流量计数系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标追踪、车辆检测追踪、过线计数、流量统计
|
10天前
|
机器学习/深度学习 存储 计算机视觉
基于YOLOv8深度学习的PCB板缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测
基于YOLOv8深度学习的PCB板缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测
|
10天前
|
机器学习/深度学习 算法 安全
基于YOLOv8深度学习的危险区域人员闯入检测与报警系统【python源码+Pyqt5界面+数据集+训练代码】YOLOv8、ByteTrack、目标追踪、区域闯入
基于YOLOv8深度学习的危险区域人员闯入检测与报警系统【python源码+Pyqt5界面+数据集+训练代码】YOLOv8、ByteTrack、目标追踪、区域闯入
|
11天前
|
机器学习/深度学习 计算机视觉 Python
深度学习实战】行人检测追踪与双向流量计数系统【python源码+Pyqt5界面+数据集+训练代码】YOLOv8、ByteTrack、目标追踪、双向计数、行人检测追踪、过线计数(3)
深度学习实战】行人检测追踪与双向流量计数系统【python源码+Pyqt5界面+数据集+训练代码】YOLOv8、ByteTrack、目标追踪、双向计数、行人检测追踪、过线计数
|
11天前
|
机器学习/深度学习 存储 算法
深度学习实战】行人检测追踪与双向流量计数系统【python源码+Pyqt5界面+数据集+训练代码】YOLOv8、ByteTrack、目标追踪、双向计数、行人检测追踪、过线计数(2)
深度学习实战】行人检测追踪与双向流量计数系统【python源码+Pyqt5界面+数据集+训练代码】YOLOv8、ByteTrack、目标追踪、双向计数、行人检测追踪、过线计数