opencv学习——cv2.findHomography()
来源:互联网 发布:网络安全法出台时间 编辑:程序博客网 时间:2024/05/23 12:50
# 第三个参数 Method used to computed a homography matrix. The following methods are possible: #0 - a regular method using all the points #CV_RANSAC - RANSAC-based robust method #CV_LMEDS - Least-Median robust method # 第四个参数取值范围在 1 到 10 , 绝一个点对的阈值。原图像的点经过变换后点与目标图像上对应点的误差 # 超过误差就认为是 outlier # 返回值中 H 为变换矩阵。mask是掩模,online的点 H, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)
画出匹配点的连线,以及拼接图。
代码:
import cv2import numpy as npMIN_MATCH_COUNT = 10img1 = cv2.imread('images/1.jpg') # queryImageimg2 = cv2.imread('images/2.jpg') # trainImagedef SIFT(): # Initiate SIFT detector sift = cv2.xfeatures2d.SIFT_create() # find the keypoints and descriptors with SIFT kp1, des1 = sift.detectAndCompute(img2,None) kp2, des2 = sift.detectAndCompute(img1,None) # BFMatcher with default params bf = cv2.BFMatcher() matches = bf.knnMatch(des1,des2, k=2) # Apply ratio test good = [] for m,n in matches: if m.distance < 0.75*n.distance: good.append(m) # cv2.drawMatchesKnn expects list of lists as matches. good_2 = np.expand_dims(good, 1) matching = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good_2[:20],None, flags=2) if len(good)>MIN_MATCH_COUNT: # 获取关键点的坐标 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) wrap = cv2.warpPerspective(img2, H, (img2.shape[1]+img2.shape[1] , img2.shape[0]+img2.shape[0])) wrap[0:img2.shape[0], 0:img2.shape[1]] = img1 rows, cols = np.where(wrap[:,:,0] !=0) min_row, max_row = min(rows), max(rows) +1 min_col, max_col = min(cols), max(cols) +1 result = wrap[min_row:max_row,min_col:max_col,:]#去除黑色无用部分 return matching, resultif __name__ == '__main__': matching, result = SIFT() cv2.imshow('img3.jpg',matching) cv2.imshow('result.jpg',result) cv2.waitKey(0) cv2.destroyAllWindows() cv2.waitKey(1) cv2.waitKey(1) cv2.waitKey(1) cv2.waitKey(1)
阅读全文
0 0
- opencv学习——cv2.findHomography()
- opencv学习——cv2.drawMatches()与cv2.drawMatchesKnn()区别
- 学习OpenCV范例(二十一)——Keypoints+Knn+findHomography进行目标定位
- 学习OpenCV范例(二十一)——Keypoints+Knn+findHomography进行目标定位
- opencv学习——cv2.xfeatures2d.SIFT_create().detectAndCompute()
- opencv学习——cv2.imshow()显示图片
- opencv学习——fft用numpy和cv2
- 如何用anaconda安装cv2(python—opencv)
- OpenCV函数学习之cv2.absdiff
- opencv.cv2.findContours()函数
- opencv cv2.THRESH_OTSU 二值化
- opencv,cv2.putText()用法
- python opencv cv2.
- 走进Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()
- mac安装cv2(即opencv)
- opencv: cv2.resize 探究(源码)
- Ubuntu下安装Opencv(cv2)
- opencv: 图像缩放(cv2.resize)
- 深度学习-根据日志画loss-acc折线图
- JAVA虚拟机体系结构
- 中级javaScript之Sum All Numbers in a Range
- 递归式求解-主方法
- 关于秋招(前端方向)的一些干货
- opencv学习——cv2.findHomography()
- 不等数列
- PE文件格式:如何恢复导入表
- java生成UUID
- IntelliJ IDEA 插件 阿里巴巴Java开发手册(Alibaba Java Coding Guidelines)
- pandas数据的导入与导出【CSV,JSON】(10/25)
- 数据存储(无数据库版)之二:存储为CSV
- 英语学习杂记
- citrix常见问题的问题收集与总结