700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > opencv-图像融合拼接

opencv-图像融合拼接

时间:2023-11-22 10:30:39

相关推荐

opencv-图像融合拼接

文章目录

带拼接图片基于SIFT特征点和RANSAC方法得到的图像特征点匹配结果图像变换结果完整代码

带拼接图片

基于SIFT特征点和RANSAC方法得到的图像特征点匹配结果

图像变换结果

完整代码

# 读取图像import cv2 #opencv读取的格式是BGRimport matplotlib.pyplot as pltimport numpy as np img=cv2.imread('right.jpg')img2=cv2.imread('left.jpg')def detectAndCompute(image):image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)sift = cv2.xfeatures2d.SIFT_create()(kps, features) = sift.detectAndCompute(image, None)kps = np.float32([kp.pt for kp in kps]) # 得到的点需要进一步转换才能使用return (kps, features)def matchKeyPoints(kpsA, kpsB, featuresA, featuresB, ratio = 0.75, reprojThresh = 4.0):# ratio是最近邻匹配的推荐阈值# reprojThresh是随机取样一致性的推荐阈值matcher = cv2.BFMatcher()rawMatches = matcher.knnMatch(featuresA, featuresB, 2)matches = []for m in rawMatches:if len(m) == 2 and m[0].distance < ratio * m[1].distance:matches.append((m[0].queryIdx, m[0].trainIdx))kpsA = np.float32([kpsA[m[0]] for m in matches]) # 使用np.float32转化列表kpsB = np.float32([kpsB[m[1]] for m in matches])(M, status) = cv2.findHomography(kpsA, kpsB, cv2.RANSAC, reprojThresh)return (M, matches, status) # 并不是所有的点都有匹配解,它们的状态存在status中def stich(imgA, imgB, M):result = cv2.warpPerspective(imgA, M, (imgA.shape[1] + imgB.shape[1], imgA.shape[0]))result[0:imgA.shape[0], 0:imgB.shape[1]] = imgBcv_show('result', result)def drawMatches(imgA, imgB, kpsA, kpsB, matches, status):(hA, wA) = imgA.shape[0:2](hB, wB) = imgB.shape[0:2]# 注意这里的3通道和uint8类型drawImg = np.zeros((max(hA, hB), wA + wB, 3), 'uint8')drawImg[0:hB, 0:wB] = imgBdrawImg[0:hA, wB:] = imgAfor ((queryIdx, trainIdx),s) in zip(matches, status):if s == 1:# 注意将float32 --> intpt1 = (int(kpsB[trainIdx][0]), int(kpsB[trainIdx][1]))pt2 = (int(kpsA[trainIdx][0]) + wB, int(kpsA[trainIdx][1]))cv2.line(drawImg, pt1, pt2, (0, 0, 255))cv_show("drawImg", drawImg)#图像的显示,也可以创建多个窗口def cv_show(name,img):cv2.imshow(name,img) # 等待时间,毫秒级,0表示任意键终止cv2.waitKey(0) cv2.destroyAllWindows()(kpsA, featuresA) = detectAndCompute(img)(kpsB, featuresB) = detectAndCompute(img2)(M, matches, status) = matchKeyPoints(kpsA, kpsB, featuresA, featuresB)# 绘制匹配结果drawMatches(img, img2, kpsA, kpsB, matches, status)stich(img, img2, M)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。