序列帧视频raw格式数据的存储和读取

杀马特。学长 韩版系。学妹 提交于 2019-11-26 06:31:50

常用的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;
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!