我们之前使用了查询图像,找到其中的一些特征点,我们取另外一个训练图像,找到里面的特征,我们找到它们中间最匹配的。简单说就是我们在一组图像里找一个目标的某个部分的位置。
我们可以使用一个calib3d模块里的函数,cv2.findHomography().如果我们传了两个图像里的点集合,它会找到那个目标的透视转换。然后我们可以使用cv2.perspectiveTransform()来找目标,它需要至少4个正确的点来找变换。
我们看过可能会有一些匹配是的错误而影响结果。哟啊解决这个问题,算法使用了RANSAC或者LEAST_MEDIAN(由标志决定)。提供正确估计的好的匹配被叫做inliers,而其他的叫做outliers。cv2.findHomography()返回一个掩图来指定inlier和outlier。
首先,和正常一样,我们找到SIFT特征,用比率检测来找最匹配的。
import numpy as np
import cv2
from matplotlib import pyplot as plt
MIN_MATCH_COUNT = 10
img1 = cv2.imread('xiaoyuanka.jpg',0)# queryImage
img2 = cv2.imread('xiaoyuanka_sence.jpg',0) # trainImage
# Initiate SIFT detector
sift = cv2.xfeatures2d.SIFT_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)
FLANN_INDEX_KDTREE = 0
index_params = dict(</

本文介绍了如何使用Python的OpenCV库,通过特征匹配和Homography技术来寻找并定位目标。首先,提取SIFT特征并进行最佳匹配。接着,设定匹配数量阈值,并使用cv2.findHomography()找到透视变换。该过程应用RANSAC或LEAST_MEDIAN算法区分inliers和outliers。最终,将查询图像的角点转换到目标图像上,展示定位结果。
最低0.47元/天 解锁文章
596

被折叠的 条评论
为什么被折叠?



