python-opencv 手动标记4点 利用findHomography 投影坐标

tech2022-09-11  108

book2.jpg boo1.jpg #!/usr/bin/env python import cv2 import numpy as np if __name__ == '__main__' : im_src = cv2.imread('book2.jpg') pts_src = np.array([[141, 131], [480, 159], [493, 630],[64, 601]]) im_dst = cv2.imread('book1.jpg') pts_dst = np.array([[318, 256],[534, 372],[316, 670],[73, 473]]) #自定义画一个多边形 测试投影关系 polyline=[[329,110],[435,110],[389,131]] im_dstDraw= cv2.polylines(im_src,[np.int32(polyline)] ,True,255,3, cv2.LINE_AA) cv2.imshow("im_dstDraw", im_dstDraw) # 计算单应性矩阵 这个是重点 h1, status = cv2.findHomography(pts_src, pts_dst) #对图像进行透视变换,就是变形 把book1变形匹配book2 im_out = cv2.warpPerspective(im_dst, h1, (im_dst.shape[1],im_dst.shape[0])) cv2.imshow("im_out", im_out) #取图片高宽 h,w = im_dst.shape[1],im_dst.shape[0] pts = np.float32(polyline).reshape(-1,1,2) #透视变换 是将图片投影到一个新的视平面 dst = cv2.perspectiveTransform(pts,h1) #绘制变换关系 img2 = cv2.polylines(im_dst,[np.int32(dst)],True,55,3, cv2.LINE_AA) cv2.imshow("img2", img2) cv2.waitKey(0)

效果如下:

 

最新回复(0)