首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于Python利用OpenCV实现Hough变换的形状检测

一个“简单”的形状将由几个参数来表示,例如一条直线可以用它的斜率和截距来表示,或者一个可以用 x、y 和半径来表示。 在我们的直线示例中,霍夫变换将负责处理图像上的点并计算霍夫空间中的值。...使用 OpenCV 检测 该过程与直线的过程大致相同,不同之处在于这次我们将使用 OpenCV 库中的不同函数。...我们现在将使用 HoughCircles,它接受以下参数: image: 8 位、单通道、灰度输入图像。 circles:找到的的输出向量。...minDist:检测到的中心之间的最小距离。如果参数太小,则除了真实圆圈之外,可能还会错误地检测到多个相邻;如果太大,可能会遗漏一些圆圈。 param1:第一个方法特定的参数。...它越小,检测到的假就越多,与较大累加器值相对应的圆圈将首先返回。 minRadius:最小圆半径。 maxRadius:最大圆半径。

2.1K10
您找到你想要的搜索结果了吗?
是的
没有找到

OpenCV:霍夫直线变换和霍夫变换

因此,它表示应检测到的最小线长。...函数:cv2.HoughCircles() 理论 在数学上表示为 ( x − x_{center}) ^2 + ( y − y_{center})^ 2 = r^ 2 ,其中 (x_{center},...因此,OpenCV使用更加技巧性的方法,即使用边缘的梯度信息的Hough梯度方法。 OpenCv中实现的函数是cv2.HoughCircles()。它有很多参数。...而低阈值为高阈值的一半 param2:默认值100,它是method设置的检测方法的对应的参数,对当前唯一的方法霍夫梯度法cv2.HOUGH_GRADIENT,它表示在检测阶段圆心的累加器阈值,它越小,就越可以检测到更多根本不存在的.../4.1.2/da/d53/tutorial_py_houghcircles.html https://docs.opencv.org/4.1.2/dd/d1a/group__imgproc__feature.html

39130

C++ OpenCV霍夫变换--检测

霍夫变换 霍夫变换的基本思路是认为图像上每一个非零像素点都有可能是一个潜在的上的一点,跟霍夫线变换一样,也是通过投票,生成累积坐标平面,设置一个累积权重来定位。如下图: ? ?...相关的API介绍 cv::HoughCircles ? ?...代码演示 新建一个项目opencv-0018,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法 ? ?...可以看到用蓝色标的右边检测出两个来,但是最大的白色并没有检测出来 我们重新看一下霍夫的检测的函数 cv::HoughCircles(src, circles, CV_HOUGH_GRADIENT,1...可以看到这回检测出来白色的球了,但是上面的黑色因为是个侧面,所以出现了检测出两个来 说明还是参数的问题,我们再修改一下 cv::HoughCircles(src, circles, CV_HOUGH_GRADIENT

2.6K30

OpenCV与图像处理(四)

本章节的主要内容是霍夫变换,包括以下2个知识点: 1、直线检测 2、检测 以下代码均在python3.6,opencv4.2.0环境下试了跑一遍,可直接运行。...2、霍夫线变换 1)标准的霍夫变换:cv2.HoughLines() 2)霍夫变换直线概率:cv2.HoughLinesP() 概率霍夫变换是霍夫变换的优化,它没有考虑所有要点,取而代之的是采用随机的点子集...---- 3、霍夫检测:cv2.HoughCircles() 假设平面坐标的任意一个上的点C,转换到极坐标中,在点C处有最大值,霍夫变换正是利用这个原理实现的检测。...基于效率考虑,Opencv中实现的霍夫变换检测是基于图像梯度的实现,分为两步: (1)检测边缘,发现可能的圆心。 (2)基于第一步的基础上从候选圆心开始计算最佳半径大小。...代码实战: # -*- coding: utf-8 -*- import cv2 import numpy as np # 霍夫检测 def HoughCircles_detection(img):

62520

OpenCV 图像分析之 —— 霍夫变换(Hough Transform)

OpenCV 实现思路 Hough变换的方法与之前描述的线变换方法相似。...一旦检测到可能的圆心(即收到预定数量的投票),就在第二轮筛选中建立半径值范围的一维直方图。这个直方图的尖峰就是被检测的半径 OpenCV 霍夫变换 Hough梯度法工作过程如下。...cv2.HoughCircles OpenCV 实现霍夫变换的函数 官方文档 函数使用 cv2.HoughCircles( image, # 单通道灰度图像,uint8 格式 method...# 如果参数太小,除了一个真实的之外,多个相邻的可能会被错误地检测到。 如果太大,有些圆圈可能会被漏掉。...它越小,就可能检测到越多的错误圆环。与较大的累加器值对应的“”将首先返回。

3.9K10

HoughCircle找总结——opencv

Opencv内部提供了一个基于Hough变换理论的找算法,HoughCircle与一般的拟合算法比起来,各有优势:优势:HoughCircle对噪声点不怎么敏感,并且可以在同一个图中找出多个;反观拟合算法...;为了提高找精度,相比拟合法,需要提供更多的参数加以控制,参数要求比较严格,且总体稳定性不佳 OpenCV内的HoughCircles对基础的Hough变换找做了一定的优化来提高速度,它不再是在参数空间画出一个完整的来进行投票...2、在此情况下,如果只输出一个Opencv的HoughCircle会默认按照投票结果的累加值排序),最好的是这样的,竟然差这么多 3、假设我们找的东西的半径我们是知道的,变化不大(+-8%)...,默认排序下得分最高的几个如左图: 貌似默认最好的并没有任何改善 很多初次使用该函数的看到这,或许就就觉得HoughCircles效果不咋地。。。...;此处只需做个小小的优化,改下评价方法,优化下排序,结果就很接近了 这是经过优化排序方法后找出的最好的 找出来的中与实际轮廓重合度最高的一般就是我们要找的;因此我们可以通过HoughCircles

1.3K31

Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示

Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示 第一章:霍夫变换检测 ① 实例演示1 ② 实例演示2 ③ 霍夫变换函数解析 第二章:Python + opencv...③ 霍夫变换函数解析 cv.HoughCircles() 方法 参数分别为:image、method、dp、minDist、param1、param2、minRadius、maxRadius 其中...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...circles = cv.HoughCircles(gray_img, cv.HOUGH_GRADIENT, 1, 30, param1=50, param2=30, minRadius=0,

1.2K20

C#使用OpenCV剪切图像中的圆形和矩形

使用OPenCV剪切矩形 现在,我们进入项目,进行OPenCV的调用。...函数里,我们先将图像进行缩放,这样可以有效的减少检测到的矩形数量。 再将图片处理成灰度模式,然后再高斯模糊,再边缘化。...图中红线为检测到矩形后,手动画上去的矩形轮廓。 使用OPenCV剪切圆形 编写矩形剪切函数——CutCircleImage。 函数里,我们依然先将图像进行缩放,为了有效的减少检测到的圆形数量。...然后再使用霍夫检测函数,获取的圆心和半径。 最后再根据圆心和半径计算出最小矩形,然后将剪切并保存。...CircleF[] circles = CvInvoke.HoughCircles(grayImage, HoughModes.Gradient, 2.0, 200.0, 100.0, 180.0

3.5K11

OpenCV消除高亮illuminationChange函数的使用

OpenCV本身也有一个消除高亮的函数,今天这篇就是来了解一下消除高亮函数的使用,就结果来说,有效果,但不多。...01 获取图像区域替换背景 在我们上一篇的代码基础上,把获取的区域这块单独写了个函数出来,目的主要是检测到后,将的区域截取出后,因为要去高光,所以外对我们来说是无用区域,直接填充到黑色,这样就减少掩膜查找无用高光区域了...完整代码 #include #include using namespace std; using namespace cv; //显示窗口设置...Mat rectroi = src(rect); //截取圆形区域 Mat circleroi = Mat::zeros(rectroi.size(), CV_8U); //绘制检测到...vector circles; HoughCircles(gray, circles, HOUGH_GRADIENT, 1, 50, 100, 100); //绘制检测到

63710

计算机视觉 OpenCV Android | 基本特征检测之 霍夫检测

这里的霍夫空间便是一个三维空间, 所以如果还是跟之前的累积计算一样,计算量就会大大增加, 这样显然不利于快速计算与检测, 所以在OpenCV中, 霍夫检测不是基于二值图像或者边缘检测的结果,..., 对图像中的噪声特别敏感, 所以在OpenCV中使用相关API实现霍夫检测的时候, 首先需要通过模糊操作对图像进行噪声抑制处理。...霍夫检测的API: HoughCircles(Mat image, Mat circles, int method, double dp, double minDist, double param1...minDist:表示区分两个的圆心之间最小的距离,如果两个之间的距离小于给定的minDist,则认为是同一个,这个参数对霍夫检测来说非常有用,可以帮助降低噪声影响。... 0);   // detect circles   Mat circles = new Mat();   dst.create(src.size(), src.type());   Imgproc.HoughCircles

1.4K21

前端 + AI —— 走进无码时代

OpenCV提供线段检测方法cv2.HoughLinesP,输入外轮廓,输出检测到的线段,具体代码实现如下: # 检测矩形 def detectRectangle(img, width, height)...: minLineLength = 10 maxLineGap = 4 # 霍夫直线变换输出检测到的线段数组 lines = cv2.HoughLinesP(img, 1...的HoughCircles方法,输入二值图,如果存在圆形,则返回圆形和半径。...一开始,我们采用直接对圆弧点进行的曲线拟合,但由于圆角点的数据过于集中,拟合的误差很大,如图: 我们知道,圆角经过十字对称后能构造出一个圆形,因此,只要我们确定了“圆角”的候选区域,构造十字轴对称图...同时,黄色块也是以边长R为正方形与半径R为1/4的差集,即s = R² - π × R² × ¼,于是联立方程,可求解圆角半径R,代码如下: 这一步我们根据面积差集计算出半径R,通过R,我们裁剪出“候选区域

1.2K30
领券