opencv 中affine函数实现旋转和平移
图像旋转和平移是图像处理中常用的一种操作,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函数实现旋转和平移相关推荐
- OpenCV中flip函数实现
一.flip()函数原型介绍 void cv::flip(InputArray src,OutputArray dst, int flipCode) 各参数含义 src:输入图像. dst:输出图像. ...
- OpenCV中initUndistortRectifyMap函数存在bug原因探究
原文首发于公众号「3D视觉工坊」:OpenCV中initUndistortRectifyMap函数存在bug原因探究. 最近在运行如下一段代码时,生成的mapx和mapy有点异常. 代码片段如下: # ...
- 转载:opencv中imshow函数运行中断的解决办法
OpenCV中 imshow函数运行中断的解决方法 羊和咩咩 2017-03-10 16:00:49 5919 收藏 最后发布:2017-03-10 16:00:49首发:2017-03-10 16: ...
- 关于opencv中cvtcolor函数的code参数用CV_BGR2YUV与CV_BGR2YCrCb的了解
根据Opencv中cvtcolor函数的源码描述,,参数CV_BGR2YCrCb用的系数为[1868, 9617, 4899, 11682, 9241], 而参数CV_BGR2YUV对应的系数只是将C ...
- 关于Opencv中Filter2D函数的补全方式
目录 关于Opencv中Filter2D函数的补全方式 环境 验证 C++举例 Python举例 关于Opencv中Filter2D函数的补全方式 环境 OpenCV3.4.16(C++) openc ...
- imfilter c语言,opencv中cvFilter2D( ) 函数filter2D()函数与MATLAB中imfilter()函数的差异...
出处: 1:cvFilter2D() 函数为opencv中c语言函数 2:filter2D()函数为opencv中c++函数 3:imfilter()函数为matlab版本函数 计算结果的异同: 2( ...
- Opencv中直方图函数calcHist
Opencv中直方图函数calcHist calcHist函数在Opencv中是极难理解的一个函数,一方面是参数说明晦涩难懂,另一方面,说明书给出的实例也不足以令人完全搞清楚该函数的使用方式.最难理解 ...
- opencv中mean函数耗时_使用OpenCV进行人脸对齐
在人脸识别项目中,如果图片中人脸的方向各不一样且相差很大,这样会影响人脸识别的准确率.所以在实际人脸检测项目中,在人脸识别的前一步往往会先进行人脸对齐.人脸对齐可以看作是数据normalization ...
- OpenCV中resize函数五种插值算法的实现过程
最新版OpenCV2.4.7中,cv::resize函数有五种插值算法:最近邻.双线性.双三次.基于像素区域关系.兰索斯插值.下面用for循环代替cv::resize函数来说明其详细的插值实现过程,其 ...
最新文章
- 【调试工具】tcpdump
- 基本数据结构和算法回顾
- Jmeter安装出现Not able to find Java executable or version问题解决方案
- Linux 4.0 里,你可能再也不需要重启你的操作系统。
- Java基础学习总结(52)——Liunx系统Centos上搭建Java开发环境
- Linux下多功能编辑器,Linux下的编辑器——vi大全
- io hang linux 原理,Linux 避免IO hang
- 41 岁蚂蚁金服总裁助理去世; 华为首款 5G 手机欧洲上市;库克首谈 5G iPhone | 极客头条...
- Loadrunner11之VuGen常用函数lr_user_data_point(一)
- 概念讲解:大地水准面 | 地球椭球体 | 参考椭球体 | 大地基准面 | 地图投影
- RF射频传输,原理介绍,三分钟看懂!发射功率、接收灵敏度详解!
- Msql特定业务之自增业务表,适用于根据表去分类管理业务数据
- Hex Fiend——mac 下 WinHex的完美替代
- php批量mp3转换,flac转mp3软件,支持批量flac转mp3
- java版本电子招标采购系统源码—企业战略布局下的采购
- 【imx6ull-alientek-emmc】linux交叉编译环境 + 内核编译
- 便签里的文件怎么传输给别人
- 移动互联网繁荣本质是什么
- 原创 | 新基建浪潮下,看科技巨头如何抢占先机
- 【数据结构与算法】之深入解析“N皇后”的求解思路与算法示例
热门文章
- 先来先服务调度算法(C++实现)
- 数据结构 线性存储 -- 栈 讲解
- mongodb 分组聚合_MongoDB按键值对进行聚合/分组
- CocoaPods 的安装与卸载
- 五邑大学数据结构邢润丹实验_哪个大学楼最高:全国大学高楼海拔高度排名
- python自带编译器闪退_python自带编译器在写入文件时闪退,或者一步步执行到写入时提示8170。解决办法:...
- java class修改_【原创】Java基础之简单修改jar包中的class
- 远程过程调用失败0x800706be_WordPress5.0 远程代码执行分析
- 网工必看,万字网络排错笔记
- 路易斯安那州立大学计算机科学,西北路易斯安那州立大学