OpenCV 基础实战六图像变换

几何变换原理

几何变换常见的就是仿射变换和透视变换,这两种变换在图像还原、图像局部处理是常用的方法。
仿射变换可以理解为平面变换,透视变换可以理解为空间变换,一个是二维一个是三维的。

仿射变换原理:

在这里插入图片描述
仿射变换是一种二维坐标到二维坐标之间的线性变换,它保持了二维图形的“平直性”(直线经过变换之后依然是直线)和“平行性”(二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变)

透视变换原理:

在这里插入图片描述
透视变换是将图片投影到一个新的视平面,也称作投影映射.它是二维(x,y)到三维(X,Y,Z),再到另一个二维(x’,y’)空间的映射.

变换示例

先上图片
在这里插入图片描述

仿射变换示例:

import cv2
import numpy as np

img=cv2.imread("../../Resources/card1.jpg")
rows, cols, channels = img.shape
point1 = np.float32([[0,0], [cols-1,0], [0,rows-1]])   #确定三个点
point2=np.float32([[10,rows*0.18], [cols*0.7,rows*0.3], [cols*0.17,rows*0.7]]) #目标点
M = cv2.getAffineTransform(point1, point2)                    #变换的矩阵
dst = cv2.warpAffine(img, M, (cols,rows))
cv2.imshow("img",dst)
cv2.waitKey(0)

仿射变换后的图片
在这里插入图片描述
从代码可以看出 仿射变换只用了三个点就完成了,因为三个点确定一个平面,这就是为什么上面提到的仿射变换是一个二维的变换。

透视变换示例:

img=cv2.imread("../../Resources/card1.jpg")
rows, cols, channels = img.shape
point1 = np.float32([[0,0], [cols-1,0], [0,rows-1],[rows-1,cols-1]])   #确定四个点
point2=np.float32([[10,rows*0.1], [cols*0.9,rows*0.2], [cols*0.1,rows*0.65],[rows*0.8,cols*0.95]])   #目标点
M = cv2.getPerspectiveTransform(point1, point2)                    #变换的矩阵
dst = cv2.warpPerspective(img, M, (cols,rows))
cv2.imshow("img",dst)
cv2.waitKey(0)

透视变换后的图片
在这里插入图片描述

可以尝试将变换后的图片转为方方正正的图片

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值