图像数据写入到文件(读写文件)

原创 2016年05月30日 10:59:18

本文主要对图像的data 数据写入到文件(包括文本格式,和二进制文件)

#include <io.h>
#include <direct.h>
//首先在桌面建立一个CR_Result1文件夹
static char* dumpRoot = "C:\\Users\\seven\\Desktop\\CR_Result1\\";
static char file2open[1024];
// 创建文件夹
int dump_init_temp(){
    //create dump folder
#if OS_ALVA==OS_Windows
    if(_access(dumpRoot, 00) != 0){
        _mkdir(dumpRoot);
#else
    if(access(dumpRoot, 00) != 0){
        mkdir(dumpRoot, S_IRUSR | S_IWUSR);
#endif
    }

    return 0;
}
//保存为二进制的文件
//filename 保存文件的名字
// buf 要保存的数据
// size 要保存文件的大小
int dump_temp(char* filename, char* buf, long long size){

    FILE* file;

    sprintf(file2open, "%s%s", dumpRoot, filename);

    file = fopen(file2open, "wb");

    if(file == NULL){
        LOGE("can't open file: %s\n", file2open);
        return -1;
    }

    fwrite(buf, 1, (size_t)size, file);

    fclose(file);

    return 0;
}
// 保存float 类型的图片数据
// filename 如1.txt
// buf 数据指针
// mWidth 数据宽
// mHeight 数据高
int DumpFloat(char * filename, char * buf, int mWidth, int mHeight)
{
    FILE* file;
    int w, h;
    float * temp = (float *)buf;
    sprintf(file2open, "%s%s", dumpRoot, filename);
    file = fopen(file2open, "w+");

    //fwrite(temp, mWidth * mHeight * sizeof(float), 1, file);

    for(h = 0; h < mHeight; h ++)
    {
        for(w = 0; w < mWidth - 1; w ++)
        {
            fprintf_s(file, "%f,", temp[h * mWidth + w]);
        }
        fprintf_s(file, "%f\n", temp[h * mWidth + w]);
    }

    fclose(file);
    return 0;
}
// 保存unsigned char 类型数据 
// 参数上同
int DumpChar(char * filename, char * buf, int mWidth, int mHeight)
{
    FILE* file;
    int w, h;
    unsigned char * temp = (unsigned char *)buf;
    sprintf(file2open, "%s%s", dumpRoot, filename);
    file = fopen(file2open, "w+");
    for(h = 0; h < mHeight; h ++)
    {
        for(w = 0; w < mWidth - 1; w ++)
        {
            fprintf_s(file, "%u,", temp[h * mWidth + w]);
        }
        fprintf_s(file, "%u\n", temp[h * mWidth + w]);
    }
    fclose(file);
    return 0;
}

int DumpInt(char * filename, char * buf, int mWidth, int mHeight)
{
    FILE* file;
    int w, h;
    int * temp = (int *)buf;
    sprintf(file2open, "%s%s", dumpRoot, filename);
    file = fopen(file2open, "w+");
    for(h = 0; h < mHeight; h ++)
    {
        for(w = 0; w < mWidth - 1; w ++)
        {
            fprintf_s(file, "%d,", temp[h * mWidth + w]);
        }
        fprintf_s(file, "%d\n", temp[h * mWidth + w]);
    }
    fclose(file);
    return 0;
}

//文件名格式为xxx{W=4}{H=4}
// 将文件读到内存
float * ReadFromFileFloat(char * fileName)
{
    char * prt;
    char * prtTemp;
    int width = 0;
    int height = 0;
    FILE * fp;
    float * tempFloatPrt = NULL;
    char * tempCharPrt = NULL;
    int lengthChar = 0;
    int ret = 0;
    int i, j;
    char fName[1024];
    int fNameLength = strlen(fileName);
    memcpy(fName, fileName, fNameLength);
    fName[fNameLength] = '\0';

    prt = fName;
    prt = strstr(prt, "{W=");
    prt = prt + strlen("{W=");
    prtTemp = strstr(prt, "}");
    * prtTemp = '\0';
    sscanf(prt, "%d", &width);
    * prtTemp = '}';

    prt = fName;
    prt = strstr(prt, "{H=");
    prt = prt + strlen("{H=");
    prtTemp = strstr(prt, "}");
    * prtTemp = '\0';
    sscanf(prt, "%d", &height);
    * prtTemp = '}';


    fp = fopen(fileName, "rb");
    if(NULL == fp)
    {
        printf("fopen err \n");
    }
    fseek(fp, 0L, SEEK_END);
    lengthChar = ftell(fp);
    fseek(fp, 0L, SEEK_SET);
    tempCharPrt = (char *)calloc(lengthChar, sizeof(char));

    ret = fread(tempCharPrt, lengthChar, 1, fp);
    if(1 != ret){ printf("fread err \n");}
    fclose(fp);

    tempFloatPrt = (float *)calloc(width * height, sizeof(float));
    prt = tempCharPrt;
    prtTemp = tempCharPrt;
    for(i = 0; i < height; i ++)
    {
        for(j = 0; j < width - 1; j ++)
        {
            prtTemp = strstr(prt, ",");
            *prtTemp = '\0';
            sscanf(prt, "%f", &tempFloatPrt[i * width + j]);
            prt = prtTemp + 1;
        }
        prtTemp = strstr(prt, "\n");
        *prtTemp = '\0';
        sscanf(prt, "%f", &tempFloatPrt[i * width + j]);
        if(i != (height - 1))
        {
            prt = prtTemp + 1;
        }
    }

    free(tempCharPrt);
    return tempFloatPrt;
}

//将文件数据读到内存
#define OS_Android 0
#define OS_Windows 1
#define OS_XXX OS_Windows
int readData(const char *filename, char ** sources, int * fileLengths)
{
    int fileLength;

    int ret;

    FILE *file = NULL;

#if OS_XXX == OS_Android
    file = fopen(filename, "rb");
#endif
#if OS_XXX == OS_Windows
    fopen_s(&file, filename, "rb");
#endif
    if (file == NULL)
        return -4;

    fseek(file, 0, SEEK_END);
    fileLength = ftell(file);
    *fileLengths = fileLength;
    *sources = (char*)malloc(fileLength + 1);
    rewind(file);
    ret = fread(*sources, fileLength, 1, file);
    (*sources)[fileLength] = '\0';
    if (ret == 0)
        return -5;

    fclose(file);

    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

图像数据拉伸显示2(可以显示任何通道,也可以显示全部通道)

// 本程序输入一个src float 类型的数据,经过数据的拉伸显示为图片, 用到opencv 库中的显示 //fileName 显示窗口的名字 // src 为 若为CV_32FC1 则输入为 m...

使用FFmpeg将多幅图像压缩为H264视频流

使用FFmpeg是进行视频或图像处理开发的利器,如何将多幅图像压缩成H264视频流是本文讨论的内容。FFmpeg配置请参照http://blog.csdn.net/wootengxjj/article...

(12)caffe总结之图像数据转换成db(leveldb/lmdb)文件

在深度学习的实际应用中,我们经常用到的原始数据是图片文件,如jpg,jpeg,png,tif等格式的,而且有可能图片的大小还不一致。而在caffe中经常使用的数据类型是lmdb或leveldb,因此就...

保存bmp文件图像数据

  • 2011年01月08日 10:59
  • 3KB
  • 下载

caffe学习(3):ubuntu下将图像数据转换成lmdb文件

上一节是使用已有的二进制文件转换成lmdb文件,但一般我们使用的很可能是原始图片,比如png、jpg格式。因此,这一节讨论将jpg格式转换成lmdb文件格式。 我主要参考了徐其华的学习专栏:Caff...

用MATLAB改写DICOM文件中的图像数据

前段时间由于项目工作的需要,
  • sfxwsaq
  • sfxwsaq
  • 2014年08月31日 20:57
  • 2630

Caffe学习:图像数据转换成db(leveldb/lmdb)文件

Caffe学习:图像数据转换成db(leveldb/lmdb)文件 转自:http://www.cnblogs.com/denny402/p/5082341.html 在深度学习的实际应用中,我...

Caffe学习系列(11):图像数据转换成db(leveldb/lmdb)文件

在深度学习的实际应用中,我们经常用到的原始数据是图片文件,如jpg,jpeg,png,tif等格式的,而且有可能图片的大小还不一致。而在caffe中经常使用的数据类型是lmdb或leveldb,因此就...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:图像数据写入到文件(读写文件)
举报原因:
原因补充:

(最多只允许输入30个字)