前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OpenCV图像处理(十九)---霍夫变换

OpenCV图像处理(十九)---霍夫变换

作者头像
用户5410712
发布于 2022-06-01 11:17:36
发布于 2022-06-01 11:17:36
70700
代码可运行
举报
文章被收录于专栏:居士说AI居士说AI
运行总次数:0
代码可运行

内能(internal energy) 从微观的角度来看,是分子无规则运动能量总和的统计平均值。分子无规则运动的能量包括分子的动能、分子间相互作用势能以及分子内部运动的能量。物体的内能不包括这个物体整体运动时的动能和它在重力场中的势能。

原则上讲,物体的内能应该包括其中所有微观粒子的动能、势能、化学能、电离能和原子核内部的核能等能量的总和,但在一般热力学状态的变化过程中,物质的分子结构、原子结构和核结构不发生变化,所以可不考虑这些能量的改变。但当在热力学研究中涉及化学反应时,需要把化学能包括到内能中。

前言

在上周的文章中,我们学习了图像的模板匹配方法,了解到模板匹配作为目标追踪算法之一,非常实用,它的主要操作就是在目标图像中遍历查找我们的模板,达到匹配的目的。今天我们继续来学习图像的新知识--霍夫变换。

一、霍夫变换

霍夫变换是一种特征检测(feature extraction),被广泛应用在图像分析(image analysis)、计算机视觉(computer vision)以及数位影像处理(digital image processing)。霍夫变换是用来辨别找出物件中的特征,例如:线条。他的算法流程大致如下,给定一个物件、要辨别的形状的种类,算法会在参数空间(parameter space)中执行投票来决定物体的形状,而这是由累加空间(accumulator space)里的局部最大值(local maximum)来决定。

现在广泛使用的霍夫变换是由RichardDuda和PeterHart在公元1972年发明,并称之为广义霍夫变换(generalizedHoughtransform),广义霍夫变换和更早前1962年的PaulHough的专利有关。经典的霍夫变换是侦测图片中的直线,之后,霍夫变换不仅能识别直线,也能够识别任何形状,常见的有圆形、椭圆形。1981年,因为DanaH.Ballard的一篇期刊论文"Generalizing the Hough transform to detect arbitrary shapes",让霍夫变换开始流行于计算机视觉界。

一段话总结:霍夫变换的存在就是为了找出物体的形状,包括,直线,圆形,椭圆等等,当然我们栏目更加注重实践,它的原理我们在这里简单的说一下,将图像中的像素值所在的坐标进行空间变换到另一个坐标,而在另一个坐标中,例如直线或者圆圈等区域的像素值将会对应一条直线方程,而且不同的形状之间的直线方程是不同的,因此可以找出直线等形状,如果需要了解他的具体数学原理,我们可以后期单独交流哦。

我们今天的分享:将霍夫变换应用到圆圈的查找中,涉及的方法包括图像灰度转换,滤波等操作。

1.1 原始图像

(驾驶室实景,方向盘在右边?)

1.2 代码实践

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#coding:utf-8
import cv2
import numpy as np

# 导入图像路径
img_path = './driver.jpg'
# 读取图像
src_img = cv2.imread(img_path)
# 图像灰度化
gray_img = cv2.cvtColor(src_img, cv2.COLOR_BGR2GRAY)
# 图像滤波 此处采用高斯滤波  防止图像由噪声
gray_img = cv2.GaussianBlur(gray_img,(7,7),0)
#gray_img = cv2.bilateralFilter(gray_img, 21, 75, 75)

# 调用霍夫变换函数找到图像中的圆圈
circles = cv2.HoughCircles(gray_img, cv2.HOUGH_GRADIENT, 1, 125,
                           param1=90, param2=68, minRadius=0)
circles = np.uint16(np.around(circles))
for i in circles[0, :]:
    # 画出圆圈的外圈,(0, 255, 0)表示BGR中的绿色(G=255)
    cv2.circle(src_img, (i[0], i[1]), i[2], (0, 255, 0), 2)
    # 画出圆心(0, 0, 255)表示BGR中的红色(R=255)
    cv2.circle(src_img, (i[0], i[1]), 2, (0, 0, 255), 3)
cv2.imshow("huofu_cicle", src_img)
# 保存实验结果
cv2.imwrite("huofu_cicle.jpg", src_img)
cv2.waitKey()

代码解读:如上代码较为简单,首先读入图像,然后进行灰度化、高斯滤波操作,接着调用霍夫变换函数进行圆圈的位置查找,该函数返回找到圆圈的圆心和范围,然后利用画圈函数进行绘制。这里我们重点关注下霍夫变换函数的参数值。

cv2.HoughCircles(image, method, dp, minDist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None)

image:8位,单通道图像。如果使用彩色图像,需要先转换为灰度图像。

method:定义检测图像中圆的方法。目前唯一实现的方法是cv2.HOUGH_GRADIENT。

dp:累加器分辨率与图像分辨率的反比。dp获取越大,累加器数组越小。

minDist:检测到的圆的中心,(x,y)坐标之间的最小距离。如果minDist太小,则可能导致检测到多个相邻的圆。如果minDist太大,则可能导致很多圆检测不到。

param1:用于处理边缘检测的梯度值方法。

param2:cv2.HOUGH_GRADIENT方法的累加器阈值。阈值越小,检测到的圈子越多。

minRadius:半径的最小大小(以像素为单位)。

maxRadius:半径的最大大小(以像素为单位)。

1.3 效果展示

(可以看到,图中方向盘位置(圆圈)已经被找到了,但是效果不是很理想,可以适当调整一下所用函数的参数)

结语

今天的文章分享到这里就结束了,我们主要学习了霍夫变换的函数使用和代码实践,虽说霍夫变换的效果可能不是很好,需要手动调整。但是,这并不影响我们的使用,因此霍夫变换的使用范围还是很广的。期待大家都能掌握今天的代码哦,我们下期再见!

编辑:玥怡居士|审核:小圈圈居士

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT进阶之旅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OpenCV 图像分析之 —— 霍夫变换(Hough Transform)
Hough(霍夫)变换是一种用于检测线、圆或者图像中其他简单形状的方法。最初Hough变换是一种线变换,这是一种相对较快的检测二值图像中直线的方法,可以进一步推广到除简单线之外的情况。
为为为什么
2022/08/09
5.4K0
OpenCV 图像分析之 —— 霍夫变换(Hough Transform)
Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示
这个是设定半径范围 50-70 后的效果,因为原图稍微大一点,半径也大了一些。
小蓝枣
2022/01/11
1.5K0
Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示
基于Python利用OpenCV实现Hough变换的形状检测
在我们开始对图像应用霍夫变换之前,我们需要了解霍夫空间是什么,我们将通过一个例子来进行了解。
小白学视觉
2022/02/14
2.6K0
基于Python利用OpenCV实现Hough变换的形状检测
OpenCV学习+常用函数记录③:霍夫变换与轮廓提取
OpenCV 霍夫变换与轮廓提取 3. 霍夫变换 3.1 霍夫直线 3.2 霍夫圆 4. 轮廓提取 4.1 查找轮廓 4.2 绘制轮廓 3. 霍夫变换 首先放上霍夫变换官方文档:[霍夫直线变换官网文档] 3.1 霍夫直线 import cv2 as cv import matplotlib.pyplot as plt import numpy as np # 1. 将图片以灰度的方式读取进来 img = cv.imread("../img/weiqi.jpg", cv.IMREAD_COLOR) gr
小黑鸭
2020/11/24
1K0
OpenCV:霍夫直线变换和霍夫圆变换
如果可以用数学形式表示形状,则霍夫变换是检测任何形状的一种比较流行的技术。即使形状有些破损或变形,也可以检测出形状。本文将讲解如何将它何作用于一条线。
用户3578099
2023/09/01
7690
OpenCV:霍夫直线变换和霍夫圆变换
OpenCV与图像处理(四)
以下代码均在python3.6,opencv4.2.0环境下试了跑一遍,可直接运行。
Must
2020/07/28
6900
OpenCV与图像处理(四)
OpenCV 圆检测
OpenCV 的 HoughCircles() 函数可以用来在一张单通道图像里检测圆形物体。下面是各参数的介绍:
用户6021899
2019/09/08
2.3K0
Python opencv图像处理基础总结(六) 直线检测 圆检测 轮廓发现
我还有改变的可能性 一想起这一点 我就心潮澎湃 文章目录 一、直线检测 使用霍夫直线变换做直线检测,前提条件:边缘检测已经完成 # 标准霍夫线变换 cv2.HoughLines(image, rho, theta, threshold, lines=None, srn=None, stn=None, min_theta=None, max_theta=None) image:经过边缘检测的输出图像,8位,单通道二进制源图像 rho:距离步长 theta:角度步长 threshold:阈值,只有
叶庭云
2020/09/17
8.7K0
Python opencv图像处理基础总结(六) 直线检测 圆检测 轮廓发现
霍夫圆环变换
算法:霍夫圆环变换是来检测图像中圆环,与使用霍夫直线变换检测直线原理类似。在霍夫圆环变换中,考虑圆环半径和圆环中心(x坐标、y坐标)。
裴来凡
2022/05/28
5070
霍夫圆环变换
OpenCV 系列教程5 | OpenCV 图像处理(中)
霍夫变换是一种特征提取技术,主要应用于检测图像中的直线或者圆。 OpenCV 中分为霍夫线变换和霍夫圆变换。
机器视觉CV
2019/11/12
1.7K0
OpenCV 系列教程5 | OpenCV 图像处理(中)
17: 霍夫变换
r_\theta=x_0\cdot\cos \theta+y_0\cdot\sin \thetarθ​=x0​⋅cosθ+y0​⋅sinθ
CodecWang
2021/12/07
9230
17: 霍夫变换
计算机视觉 OpenCV Android | 基本特征检测之 霍夫圆检测
霍夫圆变换与霍夫直线变换的原理类似,也是将圆上的每个点转换到霍夫空间, 其转换的参数方程如下: 对于圆来说,θ的取值范围在0~360°,这样就有了三个参数, 另外两个参数是圆心(x
凌川江雪
2019/03/04
1.6K0
OpenCV图像处理笔记(三):霍夫变换、直方图、轮廓等综合应用
一、霍夫直线变换 1、霍夫直线变换 Hough Line Transform用来做直线检测 前提条件 – 边缘检测已经完成 平面空间到极坐标空间转换 2、霍夫直线变换介绍 对于任意一条直线上的所有点来说 变换到极坐标中,从[0~360]空间,可以得到r的大小 属于同一条直线上点在极坐标空(r, theta)必然在一个点上有最强的信号出现,根据此反算到平面坐标中就可以得到直线上各点的像素坐标。从而得到直线 3、相关API 标准的霍夫变换 cv::HoughLines从平面坐标转换到霍夫空间,最终输出是
MiChong
2020/09/24
3.1K0
OpenCV图像处理笔记(三):霍夫变换、直方图、轮廓等综合应用
【python opencv】霍夫变换
封装在OpenCV函数**cv.HoughLines**()中。它只是返回一个:math:(rho,theta)值的数组。ρ以像素为单位,θ以弧度为单位。第一个参数,输入图像应该是二进制图像,因此在应用霍夫变换之前,请应用阈值或使用Canny边缘检测。第二和第三参数分别是ρ和θ精度。第四个参数是阈值,这意味着应该将其视为行的最低投票。请记住,票数取决于线上的点数。因此,它表示应检测到的最小线长。
西西嘛呦
2020/08/26
1.2K0
【python opencv】霍夫变换
卷积滤波器与边缘检测
高低频率 高频图像是强度变化很大的图像。并且亮度级别从一个像素到下一个像素快速变化。低频图像可以是亮度相对均匀或变化非常慢的图像。这是一个例子中最容易看到的。
小飞侠xp
2018/08/29
1.9K0
【CV 向】如何打造一个“数串串神器“
之前吃串串火锅,老板数竹签不是称重就是用手慢慢数,但是称重似乎总是得不到正确的竹签数目,而且容易暗箱操作;而慢慢数总是要等待比较长的时间,感觉两者对处理数竹签的问题都存在比较大的缺陷。因此,一款可以数竹签的应用因此产生,一下就弥补了两种处理方式所存在的缺陷。
繁依Fanyi
2023/11/06
8460
Python+OpenCV图像处理实验
这个项目是我在GitHub上看到的,和我之前的Python+OpenCV实时图像处理,异曲同工,只不过是我对实时视频的处理,这个是图像处理,功能上感觉这个项目更加全面一些,特学习并分享~
不脱发的程序猿
2021/01/20
7830
OpenCV图像处理(二十--大结局)---OpencCV VS Matplotlib显示图像
机械能是动能与势能的总和,这里的势能分为重力势能和弹性势能。我们把动能、重力势能和弹性势能统称为机械能。决定动能的是质量与速度;决定重力势能的是质量和高度;决定弹性势能的是劲度系数与形变量。机械能只是动能与势能的和。机械能是表示物体运动状态与高度的物理量。物体的动能和势能之间是可以转化的。在只有动能和势能相互转化的过程中,机械能的总量保持不变,即机械能是守恒的。
用户5410712
2022/06/01
7810
OpenCV图像处理(二十--大结局)---OpencCV VS Matplotlib显示图像
实战 | OpenCV+OCR实现弧形文字识别实例(详细步骤 + 代码)
【1】扩充图像。由于这里的只有部分圆弧,为方便后续检测圆和ROI截取,我们先将原图扩大:
Color Space
2024/05/22
1.3K0
实战 | OpenCV+OCR实现弧形文字识别实例(详细步骤 + 代码)
Halcon缺陷检测实例转OpenCV实现(六) 瓶口缺陷检测
Halcon中对应的例子为inspect_bottle_mouth.hdev,用于检测酒瓶瓶口是否出现破损等缺陷情形,检测效果如下:
Color Space
2021/01/08
4K0
推荐阅读
相关推荐
OpenCV 图像分析之 —— 霍夫变换(Hough Transform)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验