python cv2 二维图像的仿射变换,透视投影变换-记录

本文介绍了OpenCV库中用于二维图像的仿射变换和透视投影变换的函数,如warpAffine()、getAffineTransform()、getRotationMatrix2D()、warpPerspective()和getPrespectiveTransform()。通过示例代码详细阐述了如何使用这些函数进行图像的平移、缩放、旋转和投影变换,并提到了变换过程中的插值算法。

cv2的几个图像变换函数:

仿射变换

warpAffine()

getAffineTransform()

旋转变换(虽然属于仿射变换,但cv2提供了单独函数)

getRotationMatrix2D()

roate()

透视投影变换

warpPerspective()

getPrespectiveTransform()

两种变换可用下图直观形象的表达出来:

上图来源:https://www.cnblogs.com/houkai/p/6660272.html

仿射变换在图形中的变换包括:平移、缩放、旋转、斜切及它们的组合形式。这些变换的特点是:平行关系和线段的长度比例保持不变。

在opencv里面用函数warpAffine()可以实现对图像的仿射变换

def warpAffine(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None

参数说明,pycharm直接定位看解释就好了:

M变换矩阵如何求呢?提供如下函数

def getAffineTransform(src, dst): # real signature unknown; restored from __doc__
    """
    getAffineTransform(src, dst) -> retval
    .
    """
    pass

其中getAffineTransform函数的src参数保存了变换前的三个点(一般为图像的三个顶点),dst保存了变换后先要达到的效果的三个点(选中的三个顶点变换后的位置)如下图所示:

示例代码如下:

还有一些函数可以实现旋转

getRotationMatrix2D() 可以定义旋转中心和任意旋转角度

roate() 这个函数只能实现90度 180度等个别角度旋转,无法做任意角度旋转

 

投影变换对应的函数如下

getPrespectiveTransform()

warpPerspective()

投影变换对图像的4个点(不一定是顶点)进行任意拉伸,然后图像根据预定义的插值算法自适应的填充到拉伸后的不规则图形当中,变换前后4个点的位置相互对应。

变换函数的插值算法有线性插值和邻近值插值法

比如投影变换使用的案例代码如下

h, w = image.shape[:2]

A = cv2.getPerspectiveTransform(

np.array([[0, 0], [w, 0], [0, h], [w, h]], np.float32),

np.array([[w/2, 0], [w, 0], [0, h], [w, h/2.0]], np.float32))

image = cv2.warpPerspective(image, A, (w, h))

#A = cv2.getRotationMatrix2D((w/2, h/2), 30, 1)
#image_b = cv2.warpAffine(image_b, A, (w, h))

透视投影后的效果,可以参考如下:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值