十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章将为大家详细讲解有关opencv3/C++实现FLANN特征匹配的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
公司主营业务:成都做网站、网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出项城免费做网站回馈大家。
使用函数detectAndCompute()检测关键点并计算描述符
函数detectAndCompute()参数说明:
void detectAndCompute( InputArray image, //图像 InputArray mask, //掩模 CV_OUT std::vector& keypoints,//输出关键点的集合 OutputArray descriptors,//计算描述符(descriptors[i]是为keypoints[i]的计算描述符) bool useProvidedKeypoints=false //使用提供的关键点 );
match()从查询集中查找每个描述符的最佳匹配。
参数说明:
void match( InputArray queryDescriptors, //查询描述符集 InputArray trainDescriptors, //训练描述符集合 CV_OUT std::vector& matches, //匹配 InputArray mask=noArray() //指定输入查询和描述符的列表矩阵之间的允许匹配的掩码 ) const;
FLANN特征匹配示例:
#include#include using namespace cv; using namespace cv::xfeatures2d; //FLANN对高维数据较快 int main() { Mat src1,src2; src1 = imread("E:/image/image/card2.jpg"); src2 = imread("E:/image/image/cards.jpg"); if (src1.empty() || src2.empty()) { printf("can ont load images....\n"); return -1; } imshow("image1", src1); imshow("image2", src2); int minHessian = 400; //选择SURF特征 Ptr detector = SURF::create(minHessian); std::vector keypoints1; std::vector keypoints2; Mat descriptor1, descriptor2; //检测关键点并计算描述符 detector->detectAndCompute(src1, Mat(), keypoints1, descriptor1); detector->detectAndCompute(src2, Mat(), keypoints2, descriptor2); //基于Flann的描述符匹配器 FlannBasedMatcher matcher; std::vector matches; //从查询集中查找每个描述符的最佳匹配 matcher.match(descriptor1, descriptor2, matches); double minDist = 1000; double maxDist = 0; for (int i = 0; i < descriptor1.rows; i++) { double dist = matches[i].distance; printf("%f \n", dist); if (dist > maxDist) { maxDist = dist; } if (dist < minDist) { minDist = dist; } } //DMatch类用于匹配关键点描述符的 std::vector goodMatches; for (int i = 0; i < descriptor1.rows; i++) { double dist = matches[i].distance; if (dist < max(2.5*minDist, 0.02)) { goodMatches.push_back(matches[i]); } } Mat matchesImg; drawMatches(src1, keypoints1, src2, keypoints2, goodMatches, matchesImg, Scalar::all(-1), Scalar::all(-1), std::vector (), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS); imshow("output", matchesImg); waitKey(); return 0; }
关于“opencv3/C++实现FLANN特征匹配的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。