Python OpenCV 四张图像特征点匹配示例 - 使用ORB和FLANN
可以,可以将四张图的特征点和描述符分别提取出来,然后进行匹配,最后将匹配结果绘制在四张图上。以下是示例代码:
import cv2
读取四张图像
img1 = cv2.imread('1.png') img2 = cv2.imread('2.png') img3 = cv2.imread('3.png') img4 = cv2.imread('4.png')
创建ORB对象
'orb = cv2.ORB_create()'
提取四张图像的特征点和描述符
keypoints1, descriptors1 = orb.detectAndCompute(img1, None) keypoints2, descriptors2 = orb.detectAndCompute(img2, None) keypoints3, descriptors3 = orb.detectAndCompute(img3, None) keypoints4, descriptors4 = orb.detectAndCompute(img4, None)
创建FLANN匹配器对象
FLANN_INDEX_LSH = 6 index_params = dict(algorithm=FLANN_INDEX_LSH, table_number=6, key_size=12, multi_probe_level=1) search_params = dict(checks=50) flann = cv2.FlannBasedMatcher(index_params, search_params)
对图像1和图像2进行匹配
matches12 = flann.knnMatch(descriptors1, descriptors2, k=2) good_matches12 = [] for m, n in matches12: if m.distance < 0.7 * n.distance: good_matches12.append(m)
对图像2和图像3进行匹配
matches23 = flann.knnMatch(descriptors2, descriptors3, k=2) good_matches23 = [] for m, n in matches23: if m.distance < 0.7 * n.distance: good_matches23.append(m)
对图像3和图像4进行匹配
matches34 = flann.knnMatch(descriptors3, descriptors4, k=2) good_matches34 = [] for m, n in matches34: if m.distance < 0.7 * n.distance: good_matches34.append(m)
对图像1和图像4进行匹配
matches14 = flann.knnMatch(descriptors1, descriptors4, k=2) good_matches14 = [] for m, n in matches14: if m.distance < 0.7 * n.distance: good_matches14.append(m)
绘制匹配结果
img_matches12 = cv2.drawMatches(img1, keypoints1, img2, keypoints2, good_matches12, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS) img_matches23 = cv2.drawMatches(img2, keypoints2, img3, keypoints3, good_matches23, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS) img_matches34 = cv2.drawMatches(img3, keypoints3, img4, keypoints4, good_matches34, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS) img_matches14 = cv2.drawMatches(img1, keypoints1, img4, keypoints4, good_matches14, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
将四张图像拼接起来
img_concat = cv2.hconcat([img_matches12, img_matches23, img_matches34, img_matches14])
显示拼接后的图像
cv2.imshow('Matches', img_concat) cv2.waitKey(0)
原文地址: https://www.cveoy.top/t/topic/koMP 著作权归作者所有。请勿转载和采集!