我关注了OpenCV Feature Detection and Description tutorial并使用OpenCV中的SIFT等算法寻找两幅图像之间的匹配特征点。据我了解,这些算法可以找到两张图像之间的相似区域。但我对识别不同或不相似的区域很感兴趣。
我如何在两个图像上绘制所有不匹配的特征点?此外,我能否在这些不匹配点周围绘制边界,以便能够显示 2 个图像中的哪些区域不同?
我在 Windows 7 上使用 Python 代码并从最新的 OpenCV 源构建。
最佳答案
- 在两张图片上绘制所有不匹配的特征点:
一旦您了解了 Matcher objects 的结构,这项任务就非常简单了来自两个描述符的匹配 (matches = bf.match(des1,des2)
)。与此问题相关的两个 Matcher 对象的属性如下:
- DMatch.trainIdx:火车描述符中的描述符索引(或火车图像中的关键点)
- DMatch.queryIdx:查询描述符中描述符(或查询图像的关键点)的索引
然后,了解这些信息,正如@uzair_syed 所说,这只是一个 simple list operations task .
- 在非匹配点周围绘制边界:
为了实现这一点,我会做这样的事情:
- 为每个不匹配的点创建一个带有白色像素的黑色蒙版
- 根据非匹配点簇的密度,扩张具有大内核(即 15 x 15 像素)的掩码。
- 腐 eclipse 具有相同内核大小的掩码。
- 最后,在掩码上应用
findContours
函数来获取非匹配点的边界。
更多信息,你可以看看这个question and its answer .
希望它能让您走上正轨!
关于python - OpenCV 绘制非匹配点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43775842/