c++ OpenCV Mat Rect提取roi区域 裁剪Mat数据

c++ OpenCV Mat Rect提取roi区域 裁剪Mat数据


Rect(x,y,width,height)
x:左上角的列坐标。
y:左上角的行坐标。
width:裁剪几列。
height:裁剪几行。

#include <iostream>
#include <filesystem>
#include <string>
#include <windows.h>
#include <opencv2/opencv.hpp>

namespace fs = std::filesystem;
using namespace cv;
using namespace std;

// Mat Rect提取ROI区域 / 裁剪Mat数据
// ROI 在图像处理过程中,我们可能会对图像的某一个特定区域感兴趣,该区域被称为感兴趣区域(Region of Interest, ROI)。
void roi()
{
    // test
    float b[5][3] = { {1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15} };
    Mat a(5, 3, CV_32FC1, b);
    //float temp;
    //temp = a.at<float>(0, 1);
    //cout << temp << endl;
    cout << a << endl;
    /*
    Rect(x, y, width, height)
    x:左上角的列坐标
    y:左上角的行坐标
    width:裁剪几列
    height:裁剪几行
    */
    Mat c = a(Rect(0, 1, 2, 3));
    cout << c << endl;
}

int main()
{
    // 提取roi区域
    roi();

    waitKey(0);
    destroyAllWindows();
    return 0;
}

#include <iostream>
#include <filesystem>
#include <string>
#include <windows.h>
#include <opencv2/opencv.hpp>

namespace fs = std::filesystem;
using namespace cv;
using namespace std;

// Mat Rect提取ROI区域 / 裁剪Mat数据
// ROI 在图像处理过程中,我们可能会对图像的某一个特定区域感兴趣,该区域被称为感兴趣区域(Region of Interest, ROI)。
void roi()
{
    // test
    float b[5][3] = { {1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15} };
    Mat a(5, 3, CV_32FC1, b);
    //float temp;
    //temp = a.at<float>(0, 1);
    //cout << temp << endl;
    cout << a << endl;
    /*
    Rect(x, y, width, height)
    x:左上角的列坐标
    y:左上角的行坐标
    width:裁剪几列
    height:裁剪几行
    */
    Mat c = a(Rect(0, 1, 2, 3));
    cout << c << endl;
}

// Mat Rect提取ROI区域 / 裁剪Mat数据
// ROI 在图像处理过程中,我们可能会对图像的某一个特定区域感兴趣,该区域被称为感兴趣区域(Region of Interest, ROI)。
void roipic()
{
    cv::Mat src = cv::imread("F:/opencv/console/x64/Debug/jzh.png");
    printf("row: %d, col: %d\n", src.rows, src.cols);

    Rect rect(50, 50, 250, 250); // 划定区域
    Mat roi = src(rect);

    cout << "roi_size:" << rect.size() << endl; // 返回rect的尺寸 
    cout << "roi_area:" << rect.area() << endl; // 返回rect的面积
    cout << "roi_tl_point:" << rect.tl() << endl; // 返回rect的左上顶点的坐标
    cout << "roi_br_point:" << rect.br() << endl; // 返回rect的右下顶点的坐标
    cout << "roi_width:" << rect.width << endl; // 返回rect的宽度
    cout << "roi_height:" << rect.height << endl; // 回rect的高度

    namedWindow("src"); // 创建窗口;
    namedWindow("roi");

    imshow("src", src); // 显示图像
    imshow("roi", roi);
}

int main()
{
    // 提取roi区域
    //roi();
    roipic();

    waitKey(0);
    destroyAllWindows();
    return 0;
}

 

发表回复

您的电子邮箱地址不会被公开。