【OpenCV C++20 学习笔记】物体检测-Ballard和Guil霍夫变换

Ballard一般化霍夫变换

概述

以往的霍夫变换对直线和曲线的检测都能适用,但必须要先进行二值化。而Ballard的方法能将霍夫变换推广到一般的灰度图片,所以称为一般化霍夫变换(Generalized Hough Transform)。而且Ballard的方法不仅能够识别直线、圆形、抛物线等分析曲线,还能通过这些简单的形状推广到更复杂的形状,最后做到能够识别任意的复杂形状。1

API

在OpenCV中,要调用Ballard一般化霍夫变换,没有现成的函数,需要先创造一个GeneralizedHoughBallard对象的智能指针,然后通过该指针设置相关的参数。
GeneralizedHoughBallard指针传入一个模板,它就会在目标图中找出与模板相同的物体。
具体用法见下面的实现:

实现

这里使用的目标图片如下,即要在下图中找出我们想要识别的物体:
目标图片
而模板图如下,即要找的物体:
模板图
注意:目标图片和模板图都必须转换成灰度格式才能进行检测:

//读取目标图片
Mat image = imread("generalized_hough_mini_image.jpg");
//以灰度格式读取模板图
Mat templ = imread("generalized_hough_mini_template.jpg", IMREAD_GRAYSCALE);

//将目标图片转换成灰度图片
Mat grayImage;
cvtColor(image, grayImage, COLOR_RGB2GRAY);

创建Ballard对象指针,并设置参数,然后进行检测:

//创建接受检测结果的向量
vector<Vec4f> positionBallard;
Mat ballardImage{
    image.clone() };	//复制原图以供绘制检测结果

//======创建Ballard对象指针======
Ptr<GeneralizedHoughBallard> ballard{
    createGeneralizedHoughBallard() };
//设置基础参数
ballard->setMinDist(10);			//设置检测到的物体之间的最小距离(A物体中心到B物体中心)
ballard->setLevels(360);			//R-Table水平(我也不知道是啥)
ballard->setDp(2);					//霍夫空间中的最小单元与图片像素的比例的倒数
ballard->setMaxBufferSize(1000);	//设置内部缓冲的最大容量
ballard->setVotesThreshold(40);		//votes的阈值

//设置边缘检测参数
ballard->setCannyLowThresh(30);		//Canny边缘检测的下阈值
ballard->setCannyHighThresh(110)</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值