python 三维模型几何变换_python-opencv几何变换--仿射变换、透视变换

仿射变换

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()

效果图:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值