100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Homography 估计单应性矩阵代码实现

Homography 估计单应性矩阵代码实现

时间:2021-09-13 03:56:31

相关推荐

Homography 估计单应性矩阵代码实现

import cv2import numpy as np# 读取图片img1 = cv2.imread('01.jpg')img2 = cv2.imread('02.jpg')# 计算SURF特征点和对应的描述子surf = cv2.xfeatures2d.SURF_create() kp1, des1 = surf.detectAndCompute(img1, None) #kp存储特征点坐标,des存储对应描述子kp2, des2 = surf.detectAndCompute(img2, None)# 匹配特征点描述子bf = cv2.BFMatcher()matches = bf.knnMatch(des1, des2, k=2)# 提取匹配较好的特征点good = []for m,n in matches:if m.distance < 0.7*n.distance:good.append(m)# 通过特征点坐标计算单应性矩阵H# (findHomography中使用了RANSAC算法剔初错误匹配)src_pts = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1,1,2)dst_pts = np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1,1,2)H, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)matchesMask = mask.ravel().tolist()# 使用单应性矩阵计算变换结果并绘图h, w, d = img1.shapepts = np.float32([[0,0], [0,h-1], [w-1,h-1], [w-1,0]]).reshape(-1,1,2)dst = cv2.perspectiveTransform(pts, H)img2 = cv2.polylines(img2, [np.int32(dst)], True, 255, 3, cv2.LINE_AA)draw_params = dict(matchColor = (0,255,0), #绘制绿色的线singlePointColor = None,matchesMask = matchesMask, # 只画出符合条件的inliers点对flags = 2)img3 = cv2.drawMatches(img1, kp1, img2, kp2, good, None, **draw_params)dir='/home/Code/pythonProject1/img3.jpg'cv2.imwrite(dir,img3)

xfeatures2d 需要在python ==3.7版本下使用,如果有报错module ‘cv2.cv2‘ has no attribute ‘xfeatures2d请参见link

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