opencv 图像翻转旋转
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
opencv 图像翻转、旋转
转自:
/watkinsong/article/details/9189649
1.图像左右翻转、翻转90度
opencv中并没有直接封装图像旋转任意角度的函数,一般我们可以使用仿射变换获得旋转后的图像,这时候可以进行任意角度的旋转,但是如果我们需要将图像旋转90度,例如只是对图像进行左右翻转,或者旋转90度将图像放倒,那么如果还使用仿射变换,显得有些不是很简单,有点过于复杂。实际上可以使用求转置矩阵的方式将图像旋转90度,然后可以沿着指定的坐标轴对旋转后的图像进行翻转变化。使用transpose(src, dst);对目标图像进行转置变换,可以将垂直的图像变为水平放置。然后使用flip()函数对图像进行翻转。整个过程非常简单,可以看下下面的代码就非常清晰的了解了。// ImageFlip.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include "opencv/cv.h"
#include "opencv/highgui.h"
#include "stdio.h"
#include "iostream"using namespace cv;
using namespace std;int _tmain(int argc, _TCHAR* argv[]) {
Mat src = imread("lena.jpg");
Mat dst;
transpose(src, dst);
Mat dst2;
flip(dst, dst2, 1); // flip by y axis Mat dst3;
flip(dst, dst3, 0); // flip by x axis Mat dst4;
flip(dst, dst4, -1); // flip by both axises imshow("src", src);
imshow("dst", dst);
imshow("dst2", dst2);
imshow("dst3", dst3);
imshow("dst4", dst4); cvWaitKey();
return 0;
}
实验结果:原始图像:
转置以后:
flip(dst, dst2, 1); // flip by y axis2、任意角度旋转、同时缩放(输出图像大小与输入图像大小相同,容易造成图像不全)下面这份代码用于实现对图像的缩放与旋转。
OpenCV版本:2.4.2
// 图像旋转与缩放
// Author:
// Blog:/icvpr
#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
int main(int argc, char** argv)
{
cv::Mat image = cv::imread("../test.jpg");
if (image.empty())
{
std::cout<<"read image
failure"<<std::endl;
return -1;
}
cv::Point2f center = cv::Point2f(image.cols / 2, image.rows / 2); // 旋转中心
double angle = 30; // 旋转角度
double scale = 0.5; // 缩放尺度
cv::Mat rotateMat;
rotateMat = cv::getRotationMatrix2D(center, angle, scale);
cv::Mat rotateImg;
cv::warpAffine(image, rotateImg, rotateMat, image.size());
cv::imwrite("../rotate.jpg", rotateImg);
return 0;
} // 图像旋转与缩放
// Author:
// Blog:/icvpr #include
<iostream>
#include <vector>
#include <opencv2/opencv.hpp>int main(int argc, char** argv)
{ cv::Mat image = cv::imread("../test.jpg");
if (image.empty())
{
std::cout<<"read image failure"<<std::endl;
return -1;
} cv::Point2f center = cv::Point2f(image.cols / 2, image.rows / 2); // 旋转中心
double angle = 30; // 旋转角度
double scale = 0.5; // 缩放尺度cv::Mat rotateMat;
rotateMat = cv::getRotationMatrix2D(center, angle, scale); cv::Mat rotateImg;
cv::warpAffine(image, rotateImg, rotateMat,
image.size()); cv::imwrite("../rotate.jpg", rotateImg);
return 0;
}原图:缩放:旋转:旋转+缩放