基于广义 Ballard 与 Guil 霍夫变换的目标检测
本教程中你将学到如何:
- 使用 cv::GeneralizedHoughBallard 与 cv::GeneralizedHoughGuil 来检测目标
这个程序做什么?
Section titled “这个程序做什么?”-
载入图像与模板
-
借助
createGeneralizedHoughBallard()实例化 cv::GeneralizedHoughBallard -
借助
createGeneralizedHoughGuil()实例化 cv::GeneralizedHoughGuil -
为两种 GeneralizedHough 变体设置所需参数
-
执行检测并显示找到的结果
注意:
- 这两种变体都不能直接实例化。必须使用相应的 create 方法。
- Guil 霍夫非常慢。计算本教程所用“mini”文件的结果只需几秒钟。而对于分辨率更高的图像与模板(如下图所示),我的笔记本大约需要 5 分钟才能计算出结果。

下面是本教程的完整代码。 代码见下方示例
载入图像、模板并设置变量
Section titled “载入图像、模板并设置变量”位置向量将存放检测器找到的匹配项。 每个条目包含四个浮点值: position vector
- [0]:中心点的 x 坐标
- [1]:中心点的 y 坐标
- [2]:检测到的目标相对于模板的缩放比例
- [3]:检测到的目标相对于模板的旋转角度(以度为单位)
一个示例可能如下:[200, 100, 0.9, 120]
寻找最优值往往需要反复试错,并且取决于诸多因素,例如图像分辨率。
如前所述,这一步会花费一些时间,尤其是对于较大的图像以及使用 Guil 时。
绘制结果并显示图像
Section titled “绘制结果并显示图像”蓝色矩形是 cv::GeneralizedHoughBallard 的结果,绿色矩形是 cv::GeneralizedHoughGuil 的结果。
如果参数没有完美地适配样本,要得到本例这样完美的结果是不太可能的。下面展示了一个参数不够完美时的示例。对于 Ballard 变体,本图中仅用黑点标出了结果的中心。其矩形会与上一张图相同。
