int createBmpFromRaw()
{
char *rawFileName = "/test.raw";
FILE *fp = NULL;
int ret = 0;
int width = 4962;
int height = 7015;//这个大小就是我拖进ps里面看到的长宽
//unsigned char pRawData[4962*2800] = { 0 };//不能使用数组来存储,数组会在栈上分配,会报段错误(segment fault)
unsigned char* pRawData=(unsigned char*)malloc(4962*7015*sizeof(unsigned char));//改为malloc在堆上分配内存
if (NULL == pRawData)
{
printf("Fail to calloc pRawData!\n");
return -1;
}
fp = fopen(rawFileName, "rb");
if (NULL == fp)
{
printf("Fail to read %s!\n", rawFileName);
return -1;
}
ret = fread(pRawData, 4962*7015, 1, fp);//把raw数据读到malloc开辟的内存空间
if (1 != ret)
{
printf("Fail to fread data!\n");
return -1;
}
Mat iMat(height,width,CV_8UC1, pRawData);
imwrite("result.bmp", iMat);//这块会自动给bmp文件加上信息头,文件头那些东西,不需要自己写,这就是opencv实现raw到bmp的优点
free(pRawData);//释放malloc开辟的内存
close(fp);
return 0;
}