opencv warpAffine()函数详解 -- 图像旋转与平移
简述
仿射变换是二维坐标间的线性变换,故而变换后的图像仍然具有原图的一些性质,包括“平直性”以及“平行性”,常用于图像翻转(Flip)、旋转(Rotations)、平移(Translations)、缩放(Scale operations)等,然而其实现的函数就是cv::warpAffine()
下面我们将对warpAffine()函数进行介绍,并且实现图像的旋转和平移。
warpAffine()--官网介绍
warpAffine
Applies an affine transformation to an image.
C++: void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())
Python: cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst
C: void cvWarpAffine(const CvArr* src, CvArr* dst, const CvMat* mapMatrix, int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS, CvScalar fillval=cvScalarAll(0) )
Python: cv.WarpAffine(src, dst, mapMatrix, flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS, fillval=(0, 0, 0, 0)) → None
C: void cvGetQuadrangleSubPix(const CvArr* src, CvArr* dst, const CvMat* mapMatrix)
Python: cv.GetQuadrangleSubPix(src, dst, mapMatrix) → None
Parameters:
- src – Source image.
- dst – Destination image that has the size dsize and the same type as src .
- M – transformation matrix.
- dsize – Size of the destination image.
- flags – Combination of interpolation methods (see resize() ) and the optional flag WARP_INVERSE_MAP that means that M is the inverse transformation ( ).
- borderMode – Pixel extrapolation method (see borderInterpolate() ). When borderMode=BORDER_TRANSPARENT , it means that the pixels in the destination image corresponding to the “outliers” in the source image are not modified by the function.
- borderValue – Value used in case of a constant border. By default, it is 0.
The function warpAffine transforms the source image using the specified matrix:
when the flag WARP_INVERSE_MAP is set. Otherwise, the transformation is first inverted with invertAffineTransform() and then put in the formula above instead of M . The function cannot operate in-place.
由此可看出dst的计算公式:
图像的旋转
主要步骤:
1、根据旋转角度和旋转中心获取旋转矩阵;
2、根据旋转矩阵进行仿射变换,即可实现任意角度和任意中心的旋转效果。
旋转矩阵的形式如下:
其中,
代码:
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;
旋转结果显示:
图像的平移
主要步骤:
1、定义好图像的平移矩阵;
2、分别指定x方向和y方向上的平移量tx和ty。
平移矩阵的形式如下:
目标值dst计算公式已经在上面介绍过了。
代码:
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;
平移结果显示:
opencv warpAffine()函数详解 -- 图像旋转与平移相关推荐
- opencv imshow函数详解
前言 使用opencv对图像进行处理之后,通常调用imshow函数来显示处理结果.但是,我们经常会发现显示结果和我们预期的结果有些差别.这是由于opencv经常会涉及到对多种图像数据类型的处理,如果我 ...
- opencv学习笔记五:cv2.warpAffine()函数详解
cv2.warpAffine()函数主要是利用变换矩阵M对图像进行如旋转.仿射.平移等变换,只需要我们提供一个2*3的变换矩阵M,就可以对图像进行变换.它一般是和cv2.getRotationMatr ...
- opencv reshape函数详解
在opencv中,reshape函数比较有意思,它既可以改变矩阵的通道数,又可以对矩阵元素进行序列化,非常有用的一个函数. 函数原型: C++: Mat Mat::reshape(int cn, in ...
- Opencv imshow 函数详解
官方文档:imshow.namedWindow等 本来想看看imshow的窗口是否可以隐藏菜单栏,看完官方文档感觉是不可以了. imshow imshow的输入参数如下: void cv::imsho ...
- 图像处理笔记(2)---- OpenCV imread函数详解
imread()读取图片文件,imread函数有两个参数,第一个参数是图片路径,第二个参数表示读取图片的形式,有三种: cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1. ...
- OpenCV 图像卷积:cv.filter2D() 函数详解
API 照例,我们搬一下官网的 API: C++ void cv::filter2D(InputArray src,OutputArray dst,int ddepth,InputArray kern ...
- OpenCV 图像缩放:cv.resize() 函数详解
目录 系列前言 API 函数详解 参数列表 缩放方式其一 缩放方式其二 两种方式的优先级 关于插值方式 扩展 -- 相关函数 系列前言 这个系列是我第一个想要更下去的系列.每篇会全面介绍一个 Open ...
- 【OpenCV 4开发详解】图像仿射变换
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 【OpenCV 4开发详解】图像卷积
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
最新文章
- ASP.NET 2.0中GRIDVIEW排序
- 转载:Ajax及 GET、POST 区别
- ecshop 修改评论功能
- 杨氏干涉的模拟的MATLAB仿真
- php soap对象数组,nusoap传递数组对象
- python日志汇总
- php string pos,有关pos()的文章推荐10篇
- 左神算法:可见的山峰对数量(有重复值的情况)(Java版)
- 我在架构设计和代码开发中的一些常用原则
- stol函数在linux下使用,Linux下ATT汇编语法简介一
- AES-加密解密工具类
- Dart与系统进程交互
- Java 绘制艺术图案
- php请求图片,PHP - 发送GET请求并获取图片作为回报
- error: Unable to find vcvarsall.bat
- Oracle 查看表空间的使用情况SQL语句
- win8.1修改用户名
- html caption属性的值,HTML中的caption属性是什么意思?caption标签在HTML中
- 计算机输入输出接口形式,输入输出接口-微计算机原理-电子发烧友网站
- 骨传导蓝牙耳机哪款好、好用的骨传导耳机推荐