图像重定义大小(缩放)、图像直角旋转(无黑边)

图像重定义大小(缩放)、图像直角旋转(无黑边)

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;
}

 

 

 

 

 

 

 

 

 

posted @ 2022-01-24 16:32  量子与太极  阅读(251)  评论(0编辑  收藏  举报