opencv 中affine函数实现旋转和平移
Opencv 实现 函数 旋转 平移
2023-09-14 08:59:07 时间
图像旋转和平移是图像处理中常用的一种操作,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;
平移结果如下:
相关文章
- opencv rtsp 人脸识别
- python-opencv 图像二值化,自适应阈值处理
- OpenCV 图像处理的各种滤镜效果实现
- Opencv学习笔记 - OpenCV 4机器学习算法简介
- 使用OpenCV的kmeans实现图像分割
- OpenCV使用goodFeaturesToTrack实现角点检测
- 使用OpenCV实现复古效果Lomography
- (Win10+vs2017)配置OpenCV开发环境
- opencv提取surf特征点出现的错误
- QT+Opencv实现人脸检测与性别识别(1)
- 在OpenCV里使用机器学习库sklearn 实现手写数字识别1
- 在OpenCV里用ellipse画椭圆形
- 在OpenCV里实现扑克牌识别1
- 在OpenCV里实现命令行参数输入
- 在OpenCV里Harris角检测2
- 在OpenCV里实现灰度直方图2
- 在OpenCV里实现全局直方图均衡化1
- 在OpenCV里实现全局直方图均衡化2
- 在OpenCV里实现高斯平滑4
- 在OpenCV里实现均值平滑1
- 在OpenCV里实现均值平滑5
- 在OpenCV里实现闭运算
- 在OpenCV里实现Laplacian算子
- 在OpenCV里实现傅里叶变换
- 在OpenCV里实现谱残差的显著性检测
- 【OpenCV 例程200篇】76. OpenCV 实现图像傅里叶变换
- 【youcans 的 OpenCV 例程200篇】161. OTSU 阈值处理算法的实现
- 【youcans 的 OpenCV 例程200篇】149. 图像分割之边缘模型
- Opencv例程之双目相机标定