OpenCV4.5.5学习笔记(二十一):SURF特征点检测和提取(绘制关键点与匹配点)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

笔者本科时候有幸接触了OpenCV3.2.0版本的学习,后因考研压力不得不暂时停下学习的脚步,现在考研任务结束了,未来的导师也是从事的该方向,笔者又开始了新一轮的学习。回来发现OpenCV已经出到了4.5.5版本,遂重新下载新版本并决定记录这一学习历程。由于笔者水平有限,可能有错误之处还请诸位大佬多多包涵并烦请指出,让我们一起学习,共同进步。
首先需要说明的是:我是按着毛星云前辈编写的OpenCV3编程入门进行学习的,我会尽力把星云前辈的程序转成符合OpenCV4.5.5版本的。毛星云前辈于2021年12月11日不幸过世,他是我非常敬仰的一位业内大佬,我也是看他的书才开始接触OpenCV。


一、绘制关键点

此处推荐看星云前辈的《OpenCV3编程入门》进行学习!!!讲的非常详细
记一些额外的东西:
Algorithm基类、Feature2D类和SURF类之间的关系:
在这里插入图片描述
绘制关键点函数drawKeypoints()来源于features2d.hpp
在这里插入图片描述

在OpenCV官方文档中是这么写的:
void cv::drawKeypoints (
InputArray image,
const std::vector< KeyPoint > & keypoints,
InputOutputArray outImage,
const Scalar & color = Scalar::all(-1),
DrawMatchesFlags flags = DrawMatchesFlags::DEFAULT
)
第一个参数是源图像,
第二个参数是来自源图像的关键点,
第三个参数是输出图像,
第四个参数是关键点的颜色,
第五个参数是标志设置绘图功能


二、绘制匹配点

绘制匹配点函数drawMatches()来源于features2d.hpp
我们常用的是drawMatches()函数
在OpenCV官方文档中是这么写的:
void cv::drawMatches (
InputArray img1,
const std::vector< KeyPoint > & keypoints1,
InputArray img2,
const std::vector< KeyPoint > & keypoints2,
const std::vector< DMatch > & matches1to2,
InputOutputArray outImg,
const Scalar & matchColor = Scalar::all(-1),
const Scalar & singlePointColor = Scalar::all(-1),
const std::vector< char > & matchesMask = std::vector< char >(),
DrawMatchesFlags flags = DrawMatchesFlags::DEFAULT
)
第一个参数是第一个源图像,
第二个参数是第一个源图像的关键点,
第三个参数是第二个源图像,
第四个参数是第二个源图像的关键点,
第五个参数是从第一张图像匹配到第二张图像,
第六个参数是输出图像。它的内容取决于定义在输出图像中绘制的内容的标志值,
第七个参数是匹配的颜色(线和连接的关键点),
第八个参数是单个关键点(圆圈)的颜色,表示关键点不匹配,
第九个参数是确定绘制哪些匹配项的掩码。如果掩码为空,则绘制所有匹配项。
第十个参数是标志设置绘图功能


总结

星云前辈在这章提到了一个叫BruteForceMatcher的类,但是我估计应该被更新了
现在能找的近似品,同样继承于DescriptorMatcher 类。
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43264167/article/details/124587753
今日推荐