如何在不同的矩阵中裁剪图像的一部分,但矩阵在openCV中不会改变其大小。

时间:2016-06-23 04:54:10

标签: c++ image opencv matrix crop

我正在使用openCV 2.4 ver进行一个项目。 C ++ 我想裁剪图像的一部分并将其保存在不同的矩阵中。 cropped_image不是每个循环都获得一个新的单个裁剪图像,而是保留以前的图像,并在前一个图像旁边继续构建。我不确定我做错了什么..

当n = 64且m = 240时,此循环也会停止。我也不明白为什么......

任何人都可以帮助我吗?

openCV 2.4v C ++

using namespace cv;
using namespace std;

original_image = imread("image.jpg",1);
int n, m, cols_ss, rows_ss; 
int cols = 640;
int rows = 480;
cols_ss = 64 // arbitrary number;
rows_ss = 48 // arbitrary number;
Mat cropped_image;

for (n = 0; n < cols - cols_ss; n = n + cols_ss) {
    for (m = 0; m < rows - rows_ss; m = m + rows_ss) {

        // initialize cropped_image as zeros. 
        Mat cropped_image(cols_ss, rows_ss, CV_8UC1, Scalar::all(0));

        // Crop a small part of an original_image to cropped_image. 
        cropped_image = original_image(Rect(n, m, n + cols_ss, m + rows_ss));

    }
}

1 个答案:

答案 0 :(得分:0)

基于OpenCV文档,Rect的构造函数为Rect(x, y, width, height)。您确定不是cropped_image = original_image(Rect(n, m, cols_ss, rows_ss));吗?

ROI功能通过指针将1:1映射到图像中的区域。另一种确保cropped_image符合预期的方法是:

Mat cropped_image(original_image, Rect(n, m, cols_ss, rows_ss));

这样可以确保cropped_image的尺寸由投资回报率Rect确定。