二维特征框架——检测平面物体 OpenCV v4.8.0

上一个教程利用特征 2D + 同源性查找已知物体

下一个教程AKAZE 局部特征匹配

原作者Victor Eruhimov
兼容性OpenCV >= 3.0

本教程的目的是学习如何使用 features2dcalib3d 模块检测场景中的已知平面物体。

测试数据:使用数据文件夹中的图片,例如 box.png 和 box_in_scene.png。

  • 创建一个新的控制台项目。读取两张输入图像:
Mat img1 = imread(argv[1], IMREAD_GRAYSCALE);
Mat img2 = imread(argv[2], IMREAD_GRAYSCALE)
  • 检测两幅图像中的关键点,并计算每个关键点的描述符:
// 检测关键点
Ptr<Feature2D> surf = SURF::create();
vector<KeyPoint> keypoints1;
Mat descriptors1;
surf->detectAndCompute(img1, Mat(), keypoints1, descriptors1)... // 对第二幅图像做同样的处理
  • 现在,查找第一幅图像中描述符与第二幅图像中描述符最接近的匹配项: :
// 匹配的描述符
BruteForceMatcher<L2<float> > matcher;
vector<DMatch> matches;
matcher.match(descriptors1, descriptors2, matches)
  • 可视化结果
// 绘制结果
namedWindow("matches", 1);
Mat img_matches;
drawMatches(img1, keypoints1, img2, keypoints2, matches, img_matches)imshow("matches", img_matches)waitKey(0)
  • 查找两组点之间的同构变换: :
vector<Point2f> points1, points2;
// 用点填充数组
....
Mat H = findHomography(Mat(points1), Mat(points2), RANSAC, ransacReprojThreshold)
  • 创建一组离群匹配点并绘制它们。使用 perspectiveTransform(透视变换)函数绘制具有同源性的点:
Mat points1Projected; perspectiveTransform(Mat(points1), points1Projected, H)
  • 使用 drawMatches 绘制离群点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值