问题标签 [flannbasedmatcher]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 匹配描述符后opencv程序崩溃
我正在使用 SIFT 描述符和 FLANN 匹配器来获得两张图片之间匹配的最小距离。第一张图片是查询图片,第二张图片来自数据集。我想使用循环一个一个地加载第二张图片,但是在第一次迭代之后,程序在显示第一次迭代的结果后在运行时崩溃并且无法进入第二次迭代。我正在使用 opencv 2.4.13 和 vs2017。下面是我的代码:
我已经尝试了很多,这是我的问题和观察:
- 这不是因为我使用迭代。如果我只运行
matcher.match(descriptors1, descriptors2, matches);
,它也会在执行后崩溃。 - 它也不适用于 SURF 描述符或 BruteForceMatcher,两者都与上面的代码有相同的问题。我使用 SURF 使用了 opencv 教程中的不同代码段,但在显示结果后它仍然崩溃。opencv 教程中的示例代码请参见此处
- 我也尝试
initModule_nonfree();
过一些答案,但仍然没有帮助。 - 显示“完成!”后程序崩溃 并且不进入下一次迭代。
- 如果我删除
matcher.match(descriptors1, descriptors2, matches);
下面的和相关代码,它可以正常工作。所以问题一定出在“匹配”功能上。
提前非常感谢!
- - - - - - - - - - - - - - -更新 - - - - - - - - - - ---------
我的包含和链接库如下所示:
C:\Program Files (x86)\opencv\build\include C:\Program Files (x86)\opencv\build\include\opencv C:\Program Files (x86)\opencv\build\include\opencv2
C:\Program Files (x86)\opencv\build\x64\vc12\staticlib C:\Program Files (x86)\opencv\build\x64\vc12\lib
opencv_objdetect2413.lib opencv_ts2413.lib opencv_video2413.lib opencv_nonfree2413.lib opencv_ocl2413.lib opencv_photo2413.lib opencv_stitching2413.lib opencv_superres2413.lib opencv_videostab2413.lib opencv_calib3d2413.lib opencv_contrib2413.lib opencv_core2413.lib opencv_features2d2413.lib opencv_flann2413.lib opencv_gpu2413.lib opencv_highgui2413.lib opencv_imgproc2413.库 opencv_legacy2413.lib opencv_ml2413.lib
我认为配置可能没有问题...我在x86下以release模式使用它,谢谢!
c++ - 第一次的FlannBasedMatcher影响后面的FlannBasedMatcher的结果
我在我的项目中使用了 FlannBasedMatcher 两次,但似乎第一个 FlannBasedMatcher 影响了第二个 FlannBasedMatcher 的结果。
//第一个匹配
//第二场比赛
两次使用 FlannBasedMatcher 会不会有冲突?
image - 如何使用 Flann 匹配之间的关系来确定合理的单应性?
我有一张全景图像,以及在该全景图像中看到的较小的建筑物图像。我想要做的是识别该较小图像中的建筑物是否在该全景图像中,以及这两个图像如何排列。
对于第一个示例,我使用的是全景图像的裁剪版本,因此像素是相同的。
然后我使用 OpenCV 的 FlannBasedMatcher 来找到两个图像之间的良好匹配:
所以你可以看到,在这个例子中,它完美地匹配了图像之间的点。然后我找到了单应性,并应用了透视扭曲:
结果是它完美地将较小的图像放置在较大的图像中。
现在,我想在较小的图像不是较大图像的像素完美版本的情况下执行此操作。
对于新的较小图像,关键点如下所示:
您可以看到,在某些情况下,它匹配正确,而在某些情况下却没有。
如果我调用findHomography
这些匹配,它将考虑所有这些数据点并提出一个无意义的扭曲视角,因为它基于正确的匹配和不正确的匹配。
我正在寻找的是检测良好匹配和调用之间缺少的步骤,findHomography
我可以在其中查看匹配之间的关系,并确定哪些匹配是正确的。
我想知道 OpenCV 中是否有我应该在这一步中查看的功能,或者这是否是我需要自己解决的问题,如果是,我应该如何去做?
python - OpenCV python FlannBasedMatcher 添加多个描述符
我正在尝试按照教程(https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_feature2d/py_matcher/py_matcher.html)使用SURF检测图像
我现在的目标是向 FlannBasedMatcher 添加多个图像,然后将其保存以便以后能够加载它。add()
当从示例中更改代码并尝试train()
调用 knnMatch(queryDescriptors=des1, k=2) 之前的描述符时(而不是matches = flann.knnMatch(des1,des2,k=2)
像教程示例中那样得到其他结果。
问题 1:为什么我得到的结果与教程中的不同?
当改变 k 的值时knnMatch()
,例如。6,将返回最近的 6 个匹配项。在 knn=2 的情况下,为了找到好的匹配项,我检查返回匹配项的距离是否不大于m1.distance < 0.8 * m2.distance
.
问题2:在knn=6的情况下,我应该使用6中的哪个匹配作为anchor来比较距离不大于0.8*距离距离?
python - 在 Python 中使用 FlannBasedMatcher 的 DMatch 类中的 imgIdx 出现问题
我和这里有同样的问题:
如何使用opencv flannbasedmatcher和dmatch访问与最佳关键点匹配对应的最佳图像
不幸的是,这篇文章没有答案。
我有几个图像(和相应的描述符),我使用“add”方法将它们添加到 FlannBasedMatcher(每组描述符一次,对应于单个图像)。
但是,当我匹配图像时,返回的 imgIdx 远大于训练集中的图像数量。我觉得每个描述符都被视为图像,但这不是我想要的。
我想知道每个特征与哪个图像(或一组描述符)匹配。
这是我的代码的一部分(我简化了一点,我知道'test'对于变量名不是很好,但它是临时的)。同样在这里我阅读了 .key 文件,这些文件基本上是包含图像的关键点和描述符的文件(用 SIFT 提取)。
我只是准确地说,在下面的代码中,featMatch 只是我创建的一个类,用于创建一个 FlannBasedMatcher(带有初始化参数)。
我期待在查看匹配项时,更具体地说,查看匹配项的 imgIdx,根据我使用“add”方法添加的描述符集的数量,告知匹配特征(trainIdx)对应的图像索引。
但是按照这个假设,我应该能够让 imgIdx 大于我的训练集中的图像(或训练集)的数量。
但是,在这里,我得到了诸如 2960 之类的数字,而我的训练集中只有大约 5 张图像。
我的猜测是它返回特征索引而不是图像索引,但我不知道为什么。
我注意到 C++ 中的“添加”方法需要一个数组数组,其中我们有一个描述符集列表(我猜每个图像都有一个)。但是在这里,我对每个图像都有不同数量的特征,所以我不能真正创建一个每列中具有不同行数的 numpy 数组。
谢谢。
python - 问题将 KeyPoints 与 JSON 进行转换,然后使用 FlannBasedMatcher
我将关键点和描述符保存在 JSON 文件中。后来当我检索它们时,我试图在FlannBasedMatcher
. 但是,我认为转换中出了点问题,因为我收到了以下错误。
创建关键点和描述符
转换为 JSON
转换回来
匹配器
python - openCV-python flannbasedmatcher 比较 2 个图像
首先,对不起标题,我不知道如何命名。
现在,我正在使用 openCV 来比较 2 张图像。
所以在我的代码中我有:
这是为了计算描述符/关键点。
对于 Flann 匹配器,我有以下内容:
这是第二张图片的相同代码:
而且我还在一些资料中看到这是如何实现劳氏比率测试的:
后来我这样做了两个图像:
结果我得到了这张图片:
上半部分是matches
有的,另一半是good
。
你能解释一下两者之间有什么区别吗?我到处看了看,但我仍然不知道我在做什么来构建good
,并且很遗憾只是复制粘贴一些代码而不知道它是什么。