几何变换之透视---OpenCV-Python开发指南(13)

简介: 几何变换之透视---OpenCV-Python开发指南(13)

更复杂的仿射变化


上篇博文讲解了2种最基本的仿射变换:平移与旋转。但OpenCV还给我们提供了函数cv2.getAffineTransform()来生成仿射函数cv2.warpAffine()所使用的转换矩阵M。


该函数的定义如下:

def getAffineTransform(src, dst): 

src:代表输入图像的三个点坐标


dst:代表输出图像的三个点坐标


用过PS的都知道,我们在PS中使用快捷键Ctrl+T就可以随意拉扯图像,因为图像上下左右各有四个点负责定位。而src中的3个坐标与PS完全一致,分别为左上角,右上角,左下角,只是少了一个点,但定位绰绰有余,当然映射后只能是平行四边形,因为缺失一个坐标。


下面,我们来随意定位图像,并实现拉扯效果:

import cv2
import numpy as np
img = cv2.imread("4.jpg")
rows,cols,ch = img.shape
p1=np.float32([[0,0],[cols-1,0],[0,rows-1]])
p2=np.float32([[0,rows*0.33],[cols*0.85,rows*0.25],[cols*0.15,rows*0.7]])
M = cv2.getAffineTransform(p1,p2)
move_img = cv2.warpAffine(img, M, (cols, rows))
cv2.imshow("img", img)
cv2.imshow("move_img", move_img)
cv2.waitKey()
cv2.destroyAllWindows()


运行之后,效果如下图所示:

p1是原始图像的坐标,这里稍微有点变换。原图坐标就是左上角[0,0],右上角[cols,0],左下角[0,rows]。变换后的坐标左上角[0,rows0.33],右上角[cols0.85,rows0.25],左下角[cols0.15,rows*0.7]。


透视


之所以要讲解上面的平行四边形仿射,是因为我们的透视是任意四边形,通过上面的代码我们更容易理解透视的概念。


在OpenCV中,透视变换通过函数cv2.warpPerspective()实现,该函数的定义如下:

def warpPerspective(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None):

src:要透视的原始图像


M:变换透视图像的3*3变换矩阵


dsize:代表输出图像的尺寸大小


flags,borderMode,borderValue三个参数与前文类似这里不多做介绍。


下面,我们将上面的图像变换成任意四边形,具体代码如下所示:

import cv2
import numpy as np
img = cv2.imread("4.jpg")
rows, cols, ch = img.shape
p1 = np.float32([[0, 0], [cols, 0], [0, rows], [cols, rows]])
p2 = np.float32([[0, rows * 0.33], [cols * 0.85, rows * 0.25], [cols * 0.15, rows * 0.7], [cols * 0.85, rows * 0.85]])
M = cv2.getPerspectiveTransform(p1, p2)
move_img = cv2.warpPerspective(img, M, (cols, rows))
cv2.imshow("img", img)
cv2.imshow("move_img", move_img)
cv2.waitKey()
cv2.destroyAllWindows()


透视函数warpPerspective通过getPerspectiveTransform获得变换矩阵。运行之后,效果如下所示:

相关文章
|
3月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
3月前
|
存储 安全 算法
显微镜下的安全战!Python加密解密技术,透视数字世界的每一个安全细节
【9月更文挑战第7天】在数字世界中,数据安全至关重要。Python加密解密技术如同显微镜下的精密工具,确保信息的私密性和完整性。以大型医疗机构为例,通过AES和RSA算法的结合,既能高效加密大量医疗数据,又能安全传输密钥,防止数据泄露。以下是使用Python的`pycryptodome`库实现AES加密和RSA密钥交换的简化示例。此方案不仅提高了数据安全性,还为数字世界的每个细节提供了坚实保障,引领我们迈向更安全的未来。
42 1
|
4月前
|
存储 安全 算法
显微镜下的安全战!Python加密解密技术,透视数字世界的每一个安全细节
【8月更文挑战第3天】在数字世界中,数据安全至关重要。以一家处理大量敏感医疗信息的医疗机构为例,采用Python实现的AES和RSA加密技术成为了守护数据安全的强大工具。AES因其高效性和安全性被用于加密大量数据,而RSA则保证了AES密钥的安全传输。通过使用Python的`pycryptodome`库,可以轻松实现这一加密流程。此案例不仅展示了如何有效保护敏感信息,还强调了在数据加密和密钥管理过程中需要注意的关键点,为构建更安全的数字环境提供了参考。
46 10
|
4月前
|
机器学习/深度学习 XML 搜索推荐
图像自动化保存工具:Python脚本开发指南
图像自动化保存工具:Python脚本开发指南
|
6月前
|
计算机视觉
opencv之形态变换
opencv之形态变换
|
5月前
|
机器学习/深度学习 PyTorch TensorFlow
在深度学习中,数据增强是一种常用的技术,用于通过增加训练数据的多样性来提高模型的泛化能力。`albumentations`是一个强大的Python库,用于图像增强,支持多种图像变换操作,并且可以与深度学习框架(如PyTorch、TensorFlow等)无缝集成。
在深度学习中,数据增强是一种常用的技术,用于通过增加训练数据的多样性来提高模型的泛化能力。`albumentations`是一个强大的Python库,用于图像增强,支持多种图像变换操作,并且可以与深度学习框架(如PyTorch、TensorFlow等)无缝集成。
|
5月前
|
Python
Python制作动态颜色变换:颜色渐变动效
Python制作动态颜色变换:颜色渐变动效
113 0
|
6月前
|
计算机视觉
OpencV图像几何形状绘制
OpencV图像几何形状绘制
|
6月前
|
算法 计算机视觉
【Qt&OpenCV 图像的形态学变换 morpholgyEx】
【Qt&OpenCV 图像的形态学变换 morpholgyEx】
41 0
|
6月前
|
存储 SQL 算法
LeetCode第六题:Z 字形变换 【6/1000 python】
LeetCode第六题:Z 字形变换 【6/1000 python】