【Opencv】透视变换python实现效果

📅 2026/7/11 10:21:28
【Opencv】透视变换python实现效果
原始图片即需要变换的图片透视变换代码# -*- coding:utf-8 -*-importcv2importnumpyasnpimportmatplotlib.pyplotasplt# 计算透视变换参数矩阵defcal_perspective_params(img,points):# 设置偏移点。如果设置为(0,0),表示透视结果只显示变换的部分也就是画框的部分offset_x100offset_y100img_size(img.shape[1],img.shape[0])srcnp.float32(points)# 透视变换的四个点dstnp.float32([[offset_x,offset_y],[img_size[0]-offset_x,offset_y],[offset_x,img_size[1]-offset_y],[img_size[0]-offset_x,img_size[1]-offset_y]])# 透视矩阵Mcv2.getPerspectiveTransform(src,dst)print(M)# 透视逆矩阵M_inversecv2.getPerspectiveTransform(dst,src)print(M_inverse)returnM,M_inverse# 透视变换defimg_perspect_transform(img,M):img_size(img.shape[1],img.shape[0])returncv2.warpPerspective(img,M,img_size)defdraw_line(img,p1,p2,p3,p4):points[list(p1),list(p2),list(p3),list(p4)]# 画线imgcv2.line(img,p1,p2,(0,0,255),3)imgcv2.line(img,p2,p4,(0,0,255),3)imgcv2.line(img,p4,p3,(0,0,255),3)imgcv2.line(img,p3,p1,(0,0,255),3)returnpoints,imgif__name____main__:# 观察图像像素大小便于手动选点imgcv2.imread(book.jpg)plt.figure()plt.imshow(img)plt.show()# 选取四个点分别是左上、右上、左下、右下points,imgdraw_line(img,(208,320),(798,315),(160,1308),(1011,1230))cv2.imshow(test01,img)cv2.waitKey(0)cv2.imwrite(test01.png,img)M,M_inversecal_perspective_params(img,points)trasform_imgimg_perspect_transform(img,M)# 观察透视图像像素大小plt.figure()plt.imshow(trasform_img)plt.show()cv2.imshow(test02.png,trasform_img)cv2.waitKey(0)cv2.imwrite(test02.png,trasform_img)选中透视区域确定四个坐标点透视效果透视变换原理可参考https://blog.csdn.net/zchang81/article/details/73409974