前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV 几何变换-图像旋转

OpenCV 几何变换-图像旋转

作者头像
chaibubble
发布2022-05-07 09:27:55
2510
发布2022-05-07 09:27:55
举报
文章被收录于专栏:深度学习与计算机视觉

OpenCV提供了warpAffine函数实现图片仿射变换功能,我们可以利用这个函数实现图像旋转,函数原型为:

代码语言:javascript
复制
CV_EXPORTS_W void warpAffine( 
InputArray src, 
OutputArray dst,
InputArray M, 
Size dsize,
int flags=INTER_LINEAR,
int borderMode=BORDER_CONSTANT,
const Scalar& borderValue=Scalar());

其中第一,二个参数是输入和输出的图像; 第三个参数仿射变换矩阵; 第四个参数为变换后的图像尺寸; 第五个参数为差值方法,参数的默认值为int flags=INTER_LINEAR双线性插值。 其他的插值方法和其对应的参数: 具体的图像插值算法:点击打开

代码语言:javascript
复制
INTER_NEAREST=CV_INTER_NN, //!< 最邻近插值
INTER_LINEAR=CV_INTER_LINEAR, //!< 双线性插值
INTER_CUBIC=CV_INTER_CUBIC, //!<双三次插值
INTER_AREA=CV_INTER_AREA, //!< 基于面积插值
INTER_LANCZOS4=CV_INTER_LANCZOS4, //!< 8邻域兰索斯插值

第六个参数为边界处理方法,参数的默认值为int borderMode=BORDER_CONSTANT 第六个参数为边界颜色。

那么实现旋转操作的重点就在于输入合适的仿射变换矩阵-M。 OpenCV提供了getRotationMatrix2D函数计算旋转加缩放的仿射矩阵,其函数原型为:

代码语言:javascript
复制
CV_EXPORTS_W Mat getRotationMatrix2D( 
Point2f center, 
double angle, 
double scale );

参数很简单明了,不需要缩放时只需把第三个参数设为1。 角度为负,顺时针;角度为正,逆时针。 该函数的返回值是一个Mat类型的矩阵。

代码语言:javascript
复制
SrcImage=imread("1.jpg");
Mat MoveImage(SrcImage.rows,SrcImage.cols,CV_8UC3,Scalar(0,0,0));
double angle = -9.9;//角度
Point2f center(SrcImage.cols/2,SrcImage.rows/2);//中心
Mat M = getRotationMatrix2D(center,angle,1);//计算旋转的仿射变换矩阵 
cout<<M<<endl;	
warpAffine(SrcImage,MoveImage,M,Size(SrcImage.cols,SrcImage.rows));//仿射变换  
circle(MoveImage,center,2,Scalar(255,0,0));
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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