栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

opencv------图片的仿射变换(平移、旋转、透视变换)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

opencv------图片的仿射变换(平移、旋转、透视变换)

仿射变换是图像旅转,縮放,平移的总称,具体的做法是通过一个矩阵和和原图片坐标进行计算,得到新的坐标,完成交换 所以关健就是这个柜阵。

一、平移

warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])

# M:变换矩阵
# dsize:输出图片大小
# flag: 与resize中的插值算法一致
# mode: 边界外推法标志
# value:填充边界值

代码:

import cv2
import numpy as np
dog=cv2.imread('./dog1.jpeg')
#变换矩阵,向右平移
#M=np.float32([[1,0,200],[0,1,0]])
#变换矩阵,向右平移
M=np.float32([[1,0,-200],[0,1,0]])
#变换矩阵,向下平移
#M=np.float32([[1,0,0],[0,1,200]])
#dsize先高度后宽度
h,w,ch=dog.shape
#opencv中是先宽度后高度
img=cv2.warpAffine(dog,M,dsize=(w,h))

cv2.imshow('dog',img)
key=cv2.waitKey(0) 
cv2.destroyAllWindows()

二、旋转

方法一:

获取变化矩阵 getRotationMatrix2D(center, angle, scale)
#center  中心点,以图片的哪个点作为旋转时的中心点
#angle   角度,旋转的角度,按照逆时针旋转
#scale   缩放比例,想把图片进行什么样的缩放

代码:

import cv2
import numpy as np
dog=cv2.imread('./dog1.jpeg')
h,w,ch=dog.shape
#以(100,100)为中心点,旋转45度,不缩放
M=cv2.getRotationMatrix2D((100,100),45,1)
img=cv2.warpAffine(dog,M,dsize=(w,h))
cv2.imshow('dog',img)
key=cv2.waitKey(0) 
cv2.destroyAllWindows()

方法二:

已知原始图片的三个坐标,和变换之后的三个坐标,用getAffineTransform(scr,dst)算出变换矩阵M
#scr 原始图片的三个左边 
#dst 变换之后的三个坐标

代码:

import cv2
import numpy as np
dog=cv2.imread('./dog1.jpeg')
h,w,ch=dog.shape
scr=np.float32([[100,100],[200,150],[120,200]])
dst=np.float32([[100,100],[150,80],[180,120]])
M=cv2.getAffineTransform(scr,dst)
img=cv2.warpAffine(dog,M,dsize=(w,h))
cv2.imshow('dog',img)
key=cv2.waitKey(0) 
cv2.destroyAllWindows()

三、透视变换

透视变换是将一种坐标转换成另一种坐标,简单来说可以把一张”斜“的图变“正”。

代码:

import cv2
import numpy as np
cv2.namedWindow('img',cv2.WINDOW_NORMAL)
cv2.resizeWindow('img',480,640)
img=cv2.imread('./DCIM.jpg')
src=np.float32([[183,140],[806,138],[89,1274],[924,1277]])
dst=np.float32([[0,0],[960,0],[0,1280],[960,1280]])
M=cv2.getPerspectiveTransform(src,dst)
new_img=cv2.warpPerspective(img,M,(960,1280))
cv2.imshow('img',new_img)
print(img.shape)
key=cv2.waitKey(0) 
cv2.destroyAllWindows()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942390.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号