OpenCV 几何变换-图像旋转

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

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双线性插值。
其他的插值方法和其对应的参数:
具体的图像插值算法:点击打开

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函数计算旋转加缩放的仿射矩阵,其函数原型为:

CV_EXPORTS_W Mat getRotationMatrix2D( 
Point2f center, 
double angle, 
double scale );

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

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));

这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值