digits.png为2000 * 1000,其中每个数字的大小为20 * 20,总共有5000((2000*1000) / (20*20))个数字,类型为[0~9],[0~9]10个数字每个数字有5000/10 = 500个样本对其分割成单个20 * 20的图像并序列化成

#include<iostream>
#include <opencv2\opencv.hpp>
using namespace cv;
using namespace std;

int main()
{
    Mat img = imread("1.png");
    Mat gray;
    cvtColor(img, gray, CV_BGR2GRAY);
    threshold(gray, gray, 0, 255, CV_THRESH_BINARY);
    // digits.png为2000 * 1000,其中每个数字的大小为20 * 20,
    // 总共有5000((2000*1000) / (20*20))个数字,类型为[0~9],
    // [0~9]10个数字每个数字有5000/10 = 500个样本
    // 对其分割成单个20 * 20的图像并序列化成(转化成一个一维的数组)
    int side = 20;
    int m = gray.rows / side;
    int n = gray.cols / side;
    Mat data, labels;
    for (int i = 0; i < m; i++) 
    {
        int p = 0;
        int offsetRow = i * side;
        for (int j = 0; j < n; j++) 
        {

            int offsetCol = j * side;
            // 截取20*20的小块
            Mat tmp;
            gray(Range(offsetRow, offsetRow + side), Range(offsetCol, offsetCol + side)).copyTo(tmp);
            char path[50];
            char path1[50];
            int num = int(i/5);
            
            sprintf(path, ".\\train\\%d\\", num);
            sprintf(path1, "%d.jpg", p);
            stringstream ss;
            string filename;
            ss << path<< path1;
            ss >> filename;
            imwrite(filename, tmp);
            p++;
        }
    }
    

}