opencv 图像翻转旋转

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}原图:缩放:旋转:旋转+缩放

相关文档
最新文档