OpenCV 几何变换-图像旋转

墨蓝 2022-09-30 06:08 426阅读 0赞

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

  1. CV_EXPORTS_W void warpAffine(
  2. InputArray src,
  3. OutputArray dst,
  4. InputArray M,
  5. Size dsize,
  6. int flags=INTER_LINEAR,
  7. int borderMode=BORDER_CONSTANT,
  8. const Scalar& borderValue=Scalar());

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

  1. INTER_NEAREST=CV_INTER_NN, //!< 最邻近插值
  2. INTER_LINEAR=CV_INTER_LINEAR, //!< 双线性插值
  3. INTER_CUBIC=CV_INTER_CUBIC, //!<双三次插值
  4. INTER_AREA=CV_INTER_AREA, //!< 基于面积插值
  5. INTER_LANCZOS4=CV_INTER_LANCZOS4, //!< 8邻域兰索斯插值

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

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

  1. CV_EXPORTS_W Mat getRotationMatrix2D(
  2. Point2f center,
  3. double angle,
  4. double scale );

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

  1. SrcImage=imread("1.jpg");
  2. Mat MoveImage(SrcImage.rows,SrcImage.cols,CV_8UC3,Scalar(0,0,0));
  3. double angle = -9.9;//角度
  4. Point2f center(SrcImage.cols/2,SrcImage.rows/2);//中心
  5. Mat M = getRotationMatrix2D(center,angle,1);//计算旋转的仿射变换矩阵
  6. cout<<M<<endl;
  7. warpAffine(SrcImage,MoveImage,M,Size(SrcImage.cols,SrcImage.rows));//仿射变换
  8. circle(MoveImage,center,2,Scalar(255,0,0));

这里写图片描述

这里写图片描述

发表评论

表情:
评论列表 (有 0 条评论,426人围观)

还没有评论,来说两句吧...

相关阅读

    相关 OpenCV 几何变换-图像缩放

    图像的缩放主要用于改变图像的大小,缩放后图像的图像的宽度和高度会发生变化。在图像处理中是一种很基础的几何变换,但是具有很重要的作用,比如:当输入图片尺寸过大时,处理速度会很慢,

    相关 图像几何变换

    包含相同内容的两幅图像可能由于成像角度、透视关系乃至镜头自身原因所造成的几何失 真而呈现出截然不同的外观,这就给观测者或是图像识别程序带来了困扰。通过适当的几何变 换可