使用OpenCV进行图像全景拼接

重磅干货,第一时间送达

def detectAndDescribe(image, method=None): """ Compute key points and feature descriptors using an specific method """
assert method is not None, "You need to define a feature detection method. Values are: 'sift', 'surf'"
# detect and extract features from the image if method == 'sift': descriptor = cv2.xfeatures2d.SIFT_create() elif method == 'surf': descriptor = cv2.xfeatures2d.SURF_create() elif method == 'brisk': descriptor = cv2.BRISK_create() elif method == 'orb': descriptor = cv2.ORB_create()
# get keypoints and descriptors (kps, features) = descriptor.detectAndCompute(image, None)
return (kps, features)

使用ORB和汉明距离检测关键点和描述符

使用SIFT检测关键点和描述符

使用SURF检测关键点和描述符

使用BRISK和汉明距离检测关键点和描述符

def createMatcher(method,crossCheck): "Create and return a Matcher Object"
if method == 'sift' or method == 'surf': bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=crossCheck) elif method == 'orb' or method == 'brisk': bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=crossCheck) return bf

使用KNN和SIFT的定量测试进行功能匹配

在SIFT特征上使用暴力匹配器进行特征匹配

# Apply panorama correctionwidth = trainImg.shape[1] + queryImg.shape[1]height = trainImg.shape[0] + queryImg.shape[0]
result = cv2.warpPerspective(trainImg, H, (width, height))result[0:queryImg.shape[0], 0:queryImg.shape[1]] = queryImg
plt.figure(figsize=(20,10))plt.imshow(result)
plt.axis('off')plt.show()

交流群

(0)

相关推荐