【opencv+python】图像处理之二、几何变换(仿射与投影)的应用
2016-05-15 20:34
996 查看
该系列文章为 OpenCV+Python Tutorials的学习笔记
代码托管在Github
转载请注明: http://blog.csdn.net/a352611/article/details/51418178 [三记的博客]
写在文章开始之前:
关于几何变换,常见的资料都没有把数学原理部分讲透彻,基本都是照着课本说,导致我很多地方无法彻底理解.思前想后还是把这一块分成两个部分,一部分专门讲数学,一部分专门讲应用.本文为应用部分。
或者
平移的话就只能自己构造一个了。
注意,有时候我们在变换后的图像上完成了处理得到了特征点,现在需要获得对应的在原图上的坐标,这时候使用cv2.invertAffineTransform可以得到变换矩阵的逆矩阵(也可以利用Numpy.linalg.inv求解,需要转homogeneous),将点左乘逆矩阵即可得到原图坐标。
Affine变换矫正后
Perspective变换矫正后
TIPS:文中所有代码均在/Src/ImageProcessing/GeometricTransform
代码托管在Github
转载请注明: http://blog.csdn.net/a352611/article/details/51418178 [三记的博客]
写在文章开始之前:
关于几何变换,常见的资料都没有把数学原理部分讲透彻,基本都是照着课本说,导致我很多地方无法彻底理解.思前想后还是把这一块分成两个部分,一部分专门讲数学,一部分专门讲应用.本文为应用部分。
Geometry Transformation 几何变换
1.缩放 Scaling
cv2.resize实现对图片的缩放,可以指定需要的图片大小或缩放系数fx,fyResizeImg = cv2.resize(src=Img, dsize=(Img.shape[1]*2,\ Img.shape[0]*2), interpolation=cv2.INTER_LINEAR)
或者
ResizeImg = cv2.resize(src=Img, fx=2, fy=2, \ interpolation=cv2.INTER_LINEAR)
2.旋转、平移 Rotation,Translation
二者都只能通过cv2.warpAffine实现,旋转的话可以自己手写或者利用cv2.getRotationMatrix2D获得旋转矩阵。RotateMatrix = cv2.getRotationMatrix2D(center=(Img.shape[1]/2, Img.shape[0]/2), angle=90, scale=1) RotImg = cv2.warpAffine(Img, RotateMatrix, (Img.shape[0]*2, Img.shape[1]*2))
平移的话就只能自己构造一个了。
TranslationMatrix = np.array([[1, 0, 100], [0, 1, 50]], dtype=np.float32) DstImg = cv2.warpAffine(Img, TranslationMatrix, (Img.shape[0]+200, Img.shape[1]+200), borderValue=(155, 155, 155))
注意,有时候我们在变换后的图像上完成了处理得到了特征点,现在需要获得对应的在原图上的坐标,这时候使用cv2.invertAffineTransform可以得到变换矩阵的逆矩阵(也可以利用Numpy.linalg.inv求解,需要转homogeneous),将点左乘逆矩阵即可得到原图坐标。
3.仿射 Affine
对于仿射变换,我们只需要知道变换前的三个点与其对应的变换后的点,就可以通过cv2.getAffineTransform求得变换矩阵.AffineMatrix = cv2.getAffineTransform(np.array(SrcPointsA), np.array(CanvasPointsA)) AffineImg = cv2.warpAffine(Img, AffineMatrix, (Img.shape[1], Img.shape[0]))
Affine变换矫正后
4.投影 Projective
对于投影变换,我们则需要知道四个点,通过cv2.getPerspectiveTransform求得变换矩阵.之后使用cv2.warpPerspective获得矫正后的图片。PerspectiveMatrix = cv2.getPerspectiveTransform(np.array(SrcPointsA), np.array(CanvasPointsA)) PerspectiveImg = cv2.warpPerspective(Img, PerspectiveMatrix, (300, 300))
Perspective变换矫正后
TIPS:文中所有代码均在/Src/ImageProcessing/GeometricTransform
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法