opencv c++ 关于图像特征检测的问题

img


这段opencv程序为什么不能对比特征点?哪里写错了,求解惑

【以下回答由 GPT 生成】

问题描述: 1. 代码希望实现的功能是使用opencv c++进行图像特征检测,并通过描述符匹配找到两幅图像中的对应特征点。 2. 代码中没有明显的错误信息。 3. 期望得到的结果是在两幅图像中绘制出匹配的特征点。 4. 没有提供具体尝试解决问题的方法。

解决方案: 根据您提供的代码和描述,代码中存在如下问题:

  1. 图像路径问题: a. 代码中打开的图片路径为"c:/image/testo.png"和"C:/image/testl.png",请确保这两个路径指向的是实际存在的图片。 b. 请检查路径中的斜杠(/)和反斜杠(),确保路径格式正确。

  2. 变量名错误: a. 在代码中,Mat对象命名为imageo和imagel,而imshow和draw函数中使用的是image0和image1。请确保变量名一致。

  3. 函数拼写错误: a. 第15行的drawkeypoints应该改为drawKeypoints。 b. 第27行的waitkey应该改为waitKey

综上所述,为了解决这些问题,您可以尝试以下的修改:

waitKey();
Mat image0 = imread("c:/image/testo.png");
imshow(w, image0);
//waitKey();
Mat imagel = imread("C:/image/testl.png");
Ptr<AKAZE> akaze = AKAZE::create(AKAZE::DESCRIPTOR_MLDB, 0, 3, 0.001f, 4, 4, KAZE::DIFF_PM_G2);
vector<KeyPoint> keypoints1;
vector<KeyPoint> keypoints2;
akaze->detect(image0, keypoints1);
drawKeypoints(image0, keypoints1, image0);
akaze->detect(imagel, keypoints2);
drawKeypoints(imagel, keypoints2, imagel);
imshow("lakazel", image0);
waitKey();
imshow("lakazell", imagel);
waitKey();
Mat desc1, desc2;
akaze->compute(image0, keypoints1, desc1);
akaze->compute(imagel, keypoints2, desc2);
Ptr<DescriptorMatcher> descMatcher = DescriptorMatcher::create(DescriptorMatcher::FLANNBASED);
vector<DMatch> matches;
descMatcher->match(desc1, desc2, matches);
drawMatches(image0, keypoints1, imagel, keypoints2, matches, Mat());
waitKey(0);

请按照以上代码修改,并检查路径、变量名和函数拼写是否正确。如果问题仍然存在或者有其他问题,请提供更多上下文信息,我将尽力提供帮助。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^