std::vector<std::vector<Mat> > partitionImage(Mat&src, int rows, int cols)
{
std::vector<std::vector<Mat> > array(rows, std::vector<Mat>(cols));
int irows = src.rows, icols = src.cols;//原图像的行数、列数
int dr = irows / rows, dc = icols / cols;//分割后的小块图像的行数、列数
int delt_y = (irows%rows) / 2, delt_x = (icols%cols) / 2;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
int x = j * dc + delt_x, y = i * dr + delt_y;
array[i][j] = src(cv::Rect(x, y, dc, dr));
}
}
return array;
}
main.cpp
//取图像下方四分之一的区域
vector<vector<Mat> > parts = partitionImage(Src, 4, 1);
Mat a = parts[3][0];
imshow("a",a);
获取部分图像
Mat src;
Rect rect(0, src.rows / 8, src.cols, src.rows / 1.6); //(左上角坐标,长,宽)
Mat tmp = src(rect);//截取部分图像输出
imshow("tmp_rect", tmp);