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


文章目录

  • 前言
  • 一、绘制关键点
  • 二、绘制匹配点
  • 总结



前言

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


一、绘制关键点

此处推荐看星云前辈的《OpenCV3编程入门》进行学习!!!讲的非常详细

记一些额外的东西:

Algorithm基类、Feature2D类和SURF类之间的关系:

python 点云平面比较 opencv点云匹配_学习


绘制关键点函数drawKeypoints()来源于features2d.hpp

python 点云平面比较 opencv点云匹配_c++_02

在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 类。

python 点云平面比较 opencv点云匹配_opencv_03

python 点云平面比较 opencv点云匹配_visual studio_04