我正在使用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));
}
}
答案 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
确定。