C ++

会有人分享他们的OpenCV特征检测和提取基准标记的知识吗?

我试图在场景中找到一个基准标记(见下图)(使用MS Paint自行创建ARTag样式)。

使用哈里斯角点检测,我可以充分找到标记图像的角落。 同样,使用哈里斯角点检测,我可以找到场景中标记的大部分角落。 然后我使用SIFT为标记图像和场景图像提取描述符。 然后我尝试了BF和FLANN来进行特征匹配。 但是,两种匹配算法都倾向于将错误的角落匹配在一起。

有什么我可以做的,以提高准确性? 或者是否有其他检测方法更适合此应用?

代码的一部分:

GoodFeaturesToTrackDetector harris_detector(6, 0.15, 10, 3, true);
vector<KeyPoint> keypoints1, keypoints2; 

harris_detector.detect(im1, keypoints1);
harris_detector.detect(im2, keypoints2);

SiftDescriptorExtractor extractor;

Mat descriptors1, descriptors2;

extractor.compute( im1, keypoints1, descriptors1 );
extractor.compute( im2, keypoints2, descriptors2 );

BFMatcher matcher;
//FlannBasedMatcher matcher;
std::vector< DMatch > matches;
matcher.match( descriptors1, descriptors2, matches );

您可以尝试使用ORB检测器,它是FAST关键点检测器和BRIEF描述符的融合。 它比BRIEF描述符更快更好,因为后者不计算方向。

  • 您可以在samples / cpp / tutorial_code / features2D / AKAZE_tracking中找到orb的使用示例或在此处输入链接描述
  • 或者有一个python项目可以完成与你的基准类似的任务
  • 链接地址: http://www.djcxy.com/p/61069.html

    上一篇: c++

    下一篇: Collision Avoidance using OpenCV on iPad