前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图像仿射

图像仿射

作者头像
裴来凡
发布2022-05-28 16:33:14
发布2022-05-28 16:33:14
53900
代码可运行
举报
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
复制
import cv2
import numpy as np
img=cv2.imread('C:/Users/xpp/Desktop/Lena.png')#原始图像
height,width=img.shape[:2]#图像的高度和宽度
rows,cols,ch=img.shape#图像的行和列
x=100#向右平移100个像素
y=200#向下平移200个像素
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=np.float32([[1,0,x],[0,1,y]])#图像平移
N=cv2.getRotationMatrix2D((width/2,height/2),45,0.6)#图像旋转
P=cv2.getAffineTransform(p1,p2)#图像仿射
move=cv2.warpAffine(img,M,(width,height))#图像仿射
rotate=cv2.warpAffine(img,N,(width,height))#图像仿射
dst=cv2.warpAffine(img,P,(cols,rows))#图像仿射
cv2.imshow("original",img)
cv2.imshow("move",move)
cv2.imshow("rotation",rotate)
cv2.imshow("result",dst)
cv2.waitKey()
cv2.destroyAllWindows()

算法:图像仿射是图像通过一系列几何变换实现平移、旋转等多种操作。仿射变换保持图像平直性和平行性。平直性是图像经过仿射变换后,直线仍然是直线。平行性是图像经过仿射变换后,平行线仍然是平行线。

变换矩阵(映射矩阵)M实现变换: dst(x, y)= src(M11·x+M12·y+M·13, M21·x+M22·y+M·23)

例子:

将原始图像src向右平移100个像素、向下平移动200个像素,对应关系:

dst (x, y)=src (x+100, y+200) 上述表达式补充完整: dst (x, y)=src (1·x+ 0·y+100, 0·x+1·y+200)

变换矩阵M:

M11=1 M12=0 M13=100 M21=0 M22=1 M23=200

retval=cv2.getRotationMatrix2D(center, angle, scale)

  • 表示旋转中心点
  • angle表示旋转角度,正数表示逆时针旋转,负数表示顺时针旋转
  • scale表示缩放大小

retval=cv2.getAffineTransform(src, dst)

  • src代表输入图像的三个点坐标
  • dst代表输出图像的三个点坐标

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

  • src表示输入图像
  • M表示2×3的变换矩阵
  • dsize表示图像大小
  • flags表示插值方法,默认值是INTER_LINEAR
  • borderMode表示边类型,默认值是BORDER_CONSTANT
  • borderValue表示边界值,默认是0
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图像处理与模式识别研究所 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档