打开APP
未登录
开通VIP,畅享免费电子书等14项超值服
开通VIP
首页
好书
留言交流
下载APP
联系客服
python+opencv图像处理(十二)
pythonjava学习
>《python图像处理》
2021.04.06
关注
图像仿射变换和透视变换
天晴了......
1、仿射变换
图像
的
仿射变换
就是
图像的旋转加上拉升
,说直白点,就是把矩形变成平行四边形。
要把矩形变成平行四边行,只需要拉伸其四个角点就行了,事实上,只需要确定前面三个点,最后一个点自然就能确定了。
也就是要改变下图所示的三个点的值,对应到新的平行四边形上相应的三个点即可。
这三个原点以及三个变换后的点呢,就组成了一个变换矩阵
M
。
opencv
提供了根据变换前后三个点的对应关系来自动求解
M
。这个函数是
M=cv2.getAffineTransform(pos1,pos2),
其中两个位置就是变换前后的对应位置关系。输出的就是仿射矩阵
M
。
然后在使用函数
cv2.warpAffine()
即可完成仿射变换。
如下图所示,左图是原图,右图是仿射变换之后的结果图。
其代码如下:
from matplotlib import pyplot as plt
import cv2
import numpy as np
img = cv2.imread('E:/image/le.jpg')
print(img.shape)
rows,cols = img.shape[:2]
pts1 = np.float32([[0,0],[rows-1,0],[0,cols-1]])
#
原来三个点的位置
pts2 = np.float32([[20,20],[rows-50,50],[100,cols-100]])
#
变换后三个点的位置
M = cv2.getAffineTransform(pts1,pts2)
#
合成变换矩阵
res = cv2.warpAffine(img,M,(cols,rows))
#
第三个参数:变换后的图像大小
#
显示图像
plt.subplot(121)
plt.imshow(img[:,:,[2,1,0]])
plt.axis('off')
plt.title("yuan")
plt.subplot(122)
plt.imshow(res[:,:,[2,1,0]])
plt.axis('off')
plt.title("dst")
plt.show()
2、透视变换
对于透视变换,需要确定四个点的位置,其四个点对应的位置如下图。
可以通过
opencv
的函数
cv2.getPerspectiveTransform
找到变换矩阵
.
然后将
cv2.warpPerspective
应用于此
3x3
变换矩阵
,即可完成透视变换
。
有一种说法是说,通过透视变换可以将平行四边形变为矩形。
如下图所示,左图为原图,右图为透视变换后的图。
其代码如下:
import cv2
import numpy as np
import matplotlib.pylab as plt
img = cv2.imread('E:/image/ch.jpg')
print(img.shape)
rows,cols,ch = img.shape
pts1 = np.float32([[20,20],[rows-50,50],[0,cols],[rows-50,cols-50]])
#
原图四个角点的位置,我的第三个点位置没找对,所以结果图只有
1
,
2
,
4
三个点进行了拉伸,而第
3
个点没变。
pts2 = np.float32([[0,0],[rows,0],[0,cols],[rows,cols]])
#
结果图的四个点对应的位置,我这里是四个顶点
M = cv2.getPerspectiveTransform(pts1,pts2)
#
合成变换矩阵
dst = cv2.warpPerspective(img,M,(cols,rows))
#
进行变换
#
以下为显示图像
plt.subplot(121),plt.imshow(img[:,:,[2,1,0]]),plt.title('Input'),plt.axis('off')
plt.subplot(122),plt.imshow(dst[:,:,[2,1,0]]),plt.title('Output'),plt.axis('off')
plt.show()
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报
。
打开APP,阅读全文并永久保存
查看更多类似文章
猜你喜欢
类似文章
【热】
打开小程序,算一算2024你的财运
OpenCV-Python 图像的几何变换 | 十四
仿射变换
opencv 傅立叶变换演示
还在用PS给证件照换底色吗?20行代码教你用Python给证件照换底色
opencv-矩阵操作总结
OpenCV参考手册之Mat类详解(一)
更多类似文章 >>
生活服务
热点新闻
留言交流
回顶部
联系我们
分享
收藏
点击这里,查看已保存的文章
导长图
关注
一键复制
下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!
联系客服
微信登录中...
请勿关闭此页面
先别划走!
送你5元优惠券,购买VIP限时立减!
5
元
优惠券
优惠券还有
10:00
过期
马上使用
×