python 图像扭曲 opencv仿射变换 cv2.getAffineTransform() cv2.warpAffine()应用实例

目前要做数学公式图像数据增强,然后需要做图像扭曲,查阅opencv的相关资料记录一下自己的应用例子。

图像扭曲就是在图像上应用仿射变换,然后我用的方法是用python OpenCV,主要用到 cv2.getAffineTransform(),cv2.warpAffine()这两个函数。以下是我的代码示例

import cv2
import numpy as np

def AffineTrans(img):
    rows, cols = img.shape
    pts1 = np.float32([[20, 20], [30, 20], [20, 0]])  # 源图像中的三角形顶点坐标
    pts2 = np.float32([[20, 20], [30, 20], [25, 0]])  # 目标图像中的三角形顶点坐标
    M = cv2.getAffineTransform(pts1, pts2)  # 计算出仿射变换矩阵
    dst = cv2.warpAffine(img, M, (cols, rows))  # 应用仿射变换
    return dst

if __name__ == '__main__':
    img = cv2.imread(ImageName)
    affine_img = AffineTrans(img)

仿射变换的原理就是根据源图像中一个三角形的顶点坐标和应用仿射变换之后的目标图像中一个三角形的顶点坐标计算出一个变换矩阵,然后将这个矩阵应用到整个源图像。网上有很多介绍的帖子我就不多说了,只说说这个代码具体参数设置原理。

pts1 = np.float32([[20, 20], [30, 20], [20, 0]])
pts2 = np.float32([[20, 20], [30, 20], [25, 0]])

上面这两行代码就是设置的源图像(pts1)和目标图像(pts2)的顶点坐标(这个可以根据自己的数据自行设置,因为我的图像较小所以我的坐标设置的小),意思就是我们要将原图中的三角形坐标通过一个变换矩阵转换成目标图像中的坐标,如下所示:

红色是原图中的三角形,绿色是应用仿射变换之后的目标图像的三角形,根据这个设置应用仿射变换之后图像应该像左边扭曲,有了这两个三角形的顶点坐标cv2.getAffineTransform()函数就能计算得到一个仿射变换矩阵,然后利用cv2.warpAffine()在原图应用仿射变换就得到了扭曲之后的图像。以下是上面代码运行结果实例(左边是原图,右边是应用仿射变换之后的图,可以看到图像是向左边倾斜了):

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值