常用的raw格式有12位和14位之分。本次实验是将16位的帧序列图片存储到raw二进制文件中,在从读取raw文件成16位的序列图片。
直接上代码!!
raw格式文件的保存:
#include<opencv2\opencv.hpp>
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include<math.h>
using namespace std;
using namespace cv;
int num = 0;
int main()
{
std::vector<int>compression_params;
compression_params.push_back(IMWRITE_PNG_COMPRESSION); //CV_IMWRITE_PNG_COMPRESSION
compression_params.push_back(9);///无压缩png
ofstream out_RAW;
out_RAW.open(rawFile_name, ios::out | ios::app | ios::binary);
if (!out_RAW.is_open())
{
cout << "read file error!" << endl;
return 0;
}
int imageh = 200; //图片大小
int imagew = 200;
string file_name="...\\image"+to_string(num)+".png";
string Raw_Name="...\\imageRaw.raw";
for(;num<1000;num++)
{
string file_name="...\\image"+to_string(num)+".png";
Mat Image=imread(file_name,2);
out_RAW.write((char*)Image.data, 2 * imageh*imagew);
out_RAW.flush();
Sleep(1);
}
return 0;
}
raw文件的读取到png图片
#include<opencv2\opencv.hpp>
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
using namespace std;
using namespace cv;
int num = 0;
int main()
{
std::vector<int>compression_params;
compression_params.push_back(IMWRITE_PNG_COMPRESSION); //CV_IMWRITE_PNG_COMPRESSION
compression_params.push_back(9);///无压缩png
int imageh = 200;
int imagew = 200;
string filename = "...\\image_Raw.raw";
ifstream inFile(filename , ios::in | ios::binary);
if (!inFile)
{
cout << "read file error!" << endl;
return 1;
}
for(;num<1000;num++)
{
string image_name="...\\image_"+to_string(num)+".png";
Mat image(imagew, imageh, CV_16UC1);
inFile.read((char*)image.data, 2 * imageh*imagew);
imwrite(image_name,image,compression_params);
}
return 0;
}