**数据的访问方式不同,效率也不同,今天介绍一种更为高效的方式,直接上代码。**
void img2dat(Mat src, string datName)
{
IplImage img = src;
string fileName = datName + ".dat";
int height = img.height, width = img.width, depth = img.depth, channel = img.nChannels, dataSize = img.imageSize, widthStep = img.widthStep;
ofstream outFile(fileName, ios::out | ios::binary);
outFile.write((char*)&width, sizeof(width));
outFile.write((char*)&height, sizeof(height));
outFile.write((char*)&depth, sizeof(depth));
outFile.write((char*)&channel, sizeof(channel));
outFile.write((char*)&dataSize, sizeof(dataSize));
outFile.write((char*)&widthStep, sizeof(widthStep));
outFile.write((char*)img.imageData, dataSize);
outFile.close();
}
void dat2img(Mat& dest, string datName)
{
string fileName = datName + ".dat";
int head[6];
ifstream fp(fileName, ios::binary);
fp.read((char*)head, 6 * sizeof(int));
int width, height, depth, channels, dataSize, widthStep;;
width = head[0];
height = head[1];
depth = head[2];
channels = head[3];
dataSize = head[4];
widthStep = head[5];
CvSize imgSize = cvSize(width, height);
IplImage* img = cvCreateImage(imgSize, depth, channels);
fp.read(img->imageData, dataSize);
fp.close();
dest = cvarrToMat(img, false);
}