python-opencv几何变换--仿射变换、透视变换

   日期:2024-01-17     浏览:53    评论:0    

仿射变换

opencv提供了函数cv2.getAffineTransform()来创建一个2*3的矩阵,该矩阵传递给cv2.warpAffine()。该函数语法格式为:

retval = cv.getAffineTransform(src, dst)
'''
src:输入图像的三个点坐标
dst:输出图像的三个点坐标
三个点分别对应左上角、右上角、左下角
'''

查看如下放射变换实例:

import numpy as np
import cv2 as cv

img = cv.imread(r'Lena.png', 1)
rows, cols, channels = img.shape
p1 = np.float32([[0,0], [cols-1,0], [0,rows-1]])
p2 = np.float32([[0,rows*0.3], [cols*0.8,rows*0.2], [cols*0.15,rows*0.7]])
M = cv.getAffineTransform(p1, p2)
dst = cv.warpAffine(img, M, (cols,rows))
cv.imshow('original', img)
cv.imshow('result', dst)
cv.waitKey(0)
cv.destroyAllWindows()

效果图:

 

透视变换

上述仿射变换可以将矩形映射成任意平行四边形,各边仍保持平行;而透视变换可以将矩形映射为任意四边形,直线仍保持直线。

由于不再是平行四边形,需提供四个顶点。

透视变换通过函数cv2.warpPerspective()实现,语法为:

dst = cv.warpPerspective(src, M, dsize[, flags[, borderMode[, borderValue]]])
'''
dst:透视后的输出图像,dsize决定输出图像大小
src:输入图像
M:3*3变换矩阵
flags:插值方法,默认为INTER_LINEAR
borderMode:边类型,默认为BORDER_CONSTANT
borderValue:边界值,默认为0
'''

透视变换通过函数cv2.getPerspectiveTransform()来生成转换矩阵,需输入输入图像和输出图像的四个顶点的坐标。

import numpy as np
import cv2 as cv

img = cv.imread(r'Lena.png', 1)
rows, cols, channels = img.shape
p1 = np.float32([[0,0], [cols-1,0], [0,rows-1], [rows-1,cols-1]])
p2 = np.float32([[0,rows*0.3], [cols*0.8,rows*0.2], [cols*0.15,rows*0.7], [cols*0.8,rows*0.8]])
M = cv.getPerspectiveTransform(p1,p2)
dst = cv.warpPerspective(img, M, (cols, rows))
cv.imshow('original', img)
cv.imshow('result', dst)
cv.waitKey(0)
cv.destroyAllWindows()

效果图:

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服