图像重定义大小(缩放)、图像直角旋转(无黑边)
图像重定义大小(缩放)、图像直角旋转(无黑边)
1.图像自定义一个大小和类型的零矩阵,重定义图像大小和类型。
自定义零矩阵:
Mat image = Mat::zeros(rows, cols, CV_8UC3); //自定义一个零矩阵 //CV_8UC3为3通道彩色 CV_8UC1为灰度图片。 Mat image1 = Mat::zeros(image.size(), image.type());
重定义图片大小:
resize(frame, dst, Size(frame.cols / 2, frame.rows / 2), 0, 0, INTER_LINEAR); //第一个参数:为输入图像; //第二个参数:为输出图像; //第三个参数:输出图像的大小; //第四个参数:沿着水平轴的缩放系数; //第五个参数:沿着垂直轴的缩放系数; //第六个参数:插值方式默认为 INTER_LINEAR 线性插值;
2.在做图像处理时,需用做图像旋转 90°、180°、270° 的操作,OpenCV 中可通过 flip 和 transpose 函数来配合实现
(注意:这俩函数只能实现 90°、180°、270° 的旋转,无法实现任意角度,任意角度可使用 warpAffine)
下图为顺时针旋转90°的原理图:
其中transpose为矩阵转置,flip为矩阵轴对称。(其他方向可以自行组合两个函数使用)
#include <iostream> #include <opencv2/opencv.hpp> #include <opencv.hpp> using namespace cv; using namespace std; int main() { Mat frame = imread("D:/image/pingjie/005.png"); imshow("frame", frame); //图像缩放和旋转 Mat dst; resize(frame, dst, Size(frame.cols / 2, frame.rows / 2), 0, 0, INTER_LINEAR); imshow("resize", dst); //顺时针旋转90度 Mat img2; transpose(dst, img2);//矩阵转置 imshow("transpose", img2); flip(img2, img2, 1); //1代表竖直方向旋转180度 //flip(img2,img2,0);//0代表水平方向旋转180度 //flip(img2,img2,-1);//-1代表垂直和水平方向同时旋转 imshow("flip", img2); waitKey(0); return 0; }