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++; } } }