图像旋转和平移是图像处理中常用的一种操作,opencv2和opencv3中对图像的旋转和平移都是通过仿射变换函数cv::warpAffine()来实现的。

1、图像的旋转

图像的旋转具体实现分为两步:先根据旋转角度和旋转中心获取旋转矩阵;然后根据旋转矩阵进行仿射变换,即可实现任意角度和任意中心的旋转效果。旋转矩阵的形式如下:

其中,

具体代码如下:

cv::Mat src = cv::imread("lenna.jpg");
cv::Mat dst;  //旋转角度
double angle = 45;  cv::Size src_sz = src.size();
cv::Size dst_sz(src_sz.height, src_sz.width);
int len = std::max(src.cols, src.rows);  //指定旋转中心
cv::Point2f center(len / 2., len / 2.);  //获取旋转矩阵(2x3矩阵)
cv::Mat rot_mat = cv::getRotationMatrix2D(center, angle, 1.0);  //根据旋转矩阵进行仿射变换
cv::warpAffine(src, dst, rot_mat, dst_sz);  //显示旋转效果
cv::imshow("image", src);
cv::imshow("result", dst);  cv::waitKey(0);  return 0;

结果如下:

2、图像的平移

图像的平移也分为两步:首先定义好图像的平移矩阵,分别指定x方向和y方向上的平移量tx和ty,平移矩阵的形式如下:

cv::Mat src = cv::imread("lenna.jpg");
cv::Mat dst;  cv::Size dst_sz = src.size();  //定义平移矩阵
cv::Mat t_mat =cv::Mat::zeros(2, 3, CV_32FC1);  t_mat.at<float>(0, 0) = 1;
t_mat.at<float>(0, 2) = 20; //水平平移量
t_mat.at<float>(1, 1) = 1;
t_mat.at<float>(1, 2) = 10; //竖直平移量  //根据平移矩阵进行仿射变换
cv::warpAffine(src, dst, t_mat, dst_sz);  //显示平移效果
cv::imshow("image", src);
cv::imshow("result", dst);  cv::waitKey(0);  return 0;  

平移结果如下:

转载于:https://www.cnblogs.com/Anita9002/p/9081861.html

opencv 中affine函数实现旋转和平移相关推荐

  1. OpenCV中flip函数实现

    一.flip()函数原型介绍 void cv::flip(InputArray src,OutputArray dst, int flipCode) 各参数含义 src:输入图像. dst:输出图像. ...

  2. OpenCV中initUndistortRectifyMap函数存在bug原因探究

    原文首发于公众号「3D视觉工坊」:OpenCV中initUndistortRectifyMap函数存在bug原因探究. 最近在运行如下一段代码时,生成的mapx和mapy有点异常. 代码片段如下: # ...

  3. 转载:opencv中imshow函数运行中断的解决办法

    OpenCV中 imshow函数运行中断的解决方法 羊和咩咩 2017-03-10 16:00:49 5919 收藏 最后发布:2017-03-10 16:00:49首发:2017-03-10 16: ...

  4. 关于opencv中cvtcolor函数的code参数用CV_BGR2YUV与CV_BGR2YCrCb的了解

    根据Opencv中cvtcolor函数的源码描述,,参数CV_BGR2YCrCb用的系数为[1868, 9617, 4899, 11682, 9241], 而参数CV_BGR2YUV对应的系数只是将C ...

  5. 关于Opencv中Filter2D函数的补全方式

    目录 关于Opencv中Filter2D函数的补全方式 环境 验证 C++举例 Python举例 关于Opencv中Filter2D函数的补全方式 环境 OpenCV3.4.16(C++) openc ...

  6. imfilter c语言,opencv中cvFilter2D( ) 函数filter2D()函数与MATLAB中imfilter()函数的差异...

    出处: 1:cvFilter2D() 函数为opencv中c语言函数 2:filter2D()函数为opencv中c++函数 3:imfilter()函数为matlab版本函数 计算结果的异同: 2( ...

  7. Opencv中直方图函数calcHist

    Opencv中直方图函数calcHist calcHist函数在Opencv中是极难理解的一个函数,一方面是参数说明晦涩难懂,另一方面,说明书给出的实例也不足以令人完全搞清楚该函数的使用方式.最难理解 ...

  8. opencv中mean函数耗时_使用OpenCV进行人脸对齐

    在人脸识别项目中,如果图片中人脸的方向各不一样且相差很大,这样会影响人脸识别的准确率.所以在实际人脸检测项目中,在人脸识别的前一步往往会先进行人脸对齐.人脸对齐可以看作是数据normalization ...

  9. OpenCV中resize函数五种插值算法的实现过程

    最新版OpenCV2.4.7中,cv::resize函数有五种插值算法:最近邻.双线性.双三次.基于像素区域关系.兰索斯插值.下面用for循环代替cv::resize函数来说明其详细的插值实现过程,其 ...

最新文章

  1. 【调试工具】tcpdump
  2. 基本数据结构和算法回顾
  3. Jmeter安装出现Not able to find Java executable or version问题解决方案
  4. Linux 4.0 里,你可能再也不需要重启你的操作系统。
  5. Java基础学习总结(52)——Liunx系统Centos上搭建Java开发环境
  6. Linux下多功能编辑器,Linux下的编辑器——vi大全
  7. io hang linux 原理,Linux 避免IO hang
  8. 41 岁蚂蚁金服总裁助理去世; 华为首款 5G 手机欧洲上市;库克首谈 5G iPhone | 极客头条...
  9. Loadrunner11之VuGen常用函数lr_user_data_point(一)
  10. 概念讲解:大地水准面 | 地球椭球体 | 参考椭球体 | 大地基准面 | 地图投影
  11. RF射频传输,原理介绍,三分钟看懂!发射功率、接收灵敏度详解!
  12. Msql特定业务之自增业务表,适用于根据表去分类管理业务数据
  13. Hex Fiend——mac 下 WinHex的完美替代
  14. php批量mp3转换,flac转mp3软件,支持批量flac转mp3
  15. java版本电子招标采购系统源码—企业战略布局下的采购
  16. 【imx6ull-alientek-emmc】linux交叉编译环境 + 内核编译
  17. 便签里的文件怎么传输给别人
  18. 移动互联网繁荣本质是什么
  19. 原创 | 新基建浪潮下,看科技巨头如何抢占先机
  20. 【数据结构与算法】之深入解析“N皇后”的求解思路与算法示例

热门文章

  1. 先来先服务调度算法(C++实现)
  2. 数据结构 线性存储 -- 栈 讲解
  3. mongodb 分组聚合_MongoDB按键值对进行聚合/分组
  4. CocoaPods 的安装与卸载
  5. 五邑大学数据结构邢润丹实验_哪个大学楼最高:全国大学高楼海拔高度排名
  6. python自带编译器闪退_python自带编译器在写入文件时闪退,或者一步步执行到写入时提示8170。解决办法:...
  7. java class修改_【原创】Java基础之简单修改jar包中的class
  8. 远程过程调用失败0x800706be_WordPress5.0 远程代码执行分析
  9. 网工必看,万字网络排错笔记
  10. 路易斯安那州立大学计算机科学,西北路易斯安那州立大学