c++读取raw文件

最近找工作叫我笔试处理raw的图像文件,然后把图像保存成视频,简单记录一下C++的打开方式吧

#include "stdafx.h"
#include "Read_Raw.h"
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include<iostream>
#include<fstream>
using namespace std;
using namespace cv;

Read_Raw::Read_Raw()
{
    
    
}


Read_Raw::~Read_Raw()
{
    
    
}
//主要读取程序
cv::Mat Read_Raw::R_Read(cv::String imageName)
{
    
    
		FILE *filePointer;

		fopen_s(&filePointer, imageName.c_str(), "rb+");
		if (filePointer == NULL)
		{
    
    
			std::cout << "Can not open the raw data!\n";
			return cv::Mat();
		}
		//前4个数据都是int32类型的
		int data[4];
		fread(data,2,8, filePointer);//4个字节 4个数据
		/*
		fread(
		void*  _Buffer,输出数组
		size_t _ElementSize,信息块大小(字节为单位)
		size_t _ElementCount,信息块数量
		FILE*  _Stream 文件读取流
		);
		*/

		int Width = data[0];//宽
		int Height = data[1];//高
		int Depth = data[2];//深度
		int pixelsz = data[3];//字节数

/*		fclose(filePointer);*/
		cout << data[0] << endl;
		cout << data[1] << endl;
		cout << data[2] << endl;
		cout << data[3] << endl;
		cv::Mat rawData(512, 640, CV_16UC1, cv::Scalar(0));


		if (pixelsz == 1)
		{
    
    
			cv::Mat rawData(Height, Width, CV_8UC1, cv::Scalar(0));
			for (int i = 0; i < Height; i++)
			{
    
    
				uchar *pointer = rawData.ptr<uchar>(i);
				fread(pointer, 1, Width, filePointer);
			}
			fclose(filePointer);
			return rawData;
		}
		else
		{
    
    
			
			for (int i = 0; i < 512; i++)
			{
    
    
				uint *pointer = rawData.ptr<uint>(i);
				fread(pointer, 2, 640, filePointer);
			}
			fclose(filePointer);
// 			cv::imshow("test",rawData);
// 			waitKey(0);
			return rawData;
		}
		
		
		
}

猜你喜欢

转载自blog.csdn.net/qq_40595787/article/details/127078941