文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
十四、特征匹配(单映射)爆破
欢迎阅读 Python OpenCV 特征匹配教程。 特征匹配将是稍微更令人印象深刻的模板匹配版本,其中需要一个完美的,或非常接近完美的匹配。
我们从我们希望找到的图像开始,然后我们可以在另一幅图像中搜索这个图像。 这里的完美是图像不需要相同的光照,角度,旋转等。 特征只需要匹配。
首先,我们需要一些示例图像。 我们的“模板”,或者我们将要尝试匹配的图像:
之后是我们用于搜索这个模板的图像:
在这里,我们的模板图像在模板中,比在我们要搜索的图像中要小一些。 它的旋转也不同,阴影也有些不同。
现在我们将使用一种“爆破”匹配的形式。 我们将在这两个图像中找到所有特征。 然后我们匹配这些特征。 然后,我们可以绘制我们想要的,尽可能多的匹配。 但是要小心。 如果你绘制 500 个匹配,你会有很多误报。 所以只绘制绘制前几个。
import numpy as np
import cv2
import matplotlib.pyplot as plt
img1 = cv2.imread('opencv-feature-matching-template.jpg',0)
img2 = cv2.imread('opencv-feature-matching-image.jpg',0)
到目前为止,我们已经导入了要使用的模块,并定义了我们的两个图像,即模板(img1
)和用于搜索模板的图像(img2
)。
orb = cv2.ORB_create()
这是我们打算用于特征的检测器。
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)
在这里,我们使用orb
探测器找到关键点和他们的描述符。
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
这就是我们的BFMatcher
对象。
matches = bf.match(des1,des2)
matches = sorted(matches, key = lambda x:x.distance)
这里我们创建描述符的匹配,然后根据它们的距离对它们排序。
img3 = cv2.drawMatches(img1,kp1,img2,kp2,matches[:10],None, flags=2)
plt.imshow(img3)
plt.show()
这里我们绘制了前 10 个匹配。输出:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论