精华内容
下载资源
问答
  • 所以应该采取二进制流保存的方式,用fopen, fwrite 后缀写成“.raw”(PS:单反相机采用的raw格式也是一种无压缩存储的形式) 例子: str='january.raw'; fid=fopen(str,'wb'); fwrite(fid,temp1,'double'); %tem

    遥感影像的保存需要无压缩形式的保存,普通JPG, TIFF等格式会压缩数据,改变原始数据值

    所以应该采取二进制流保存的方式,用fopen, fwrite

    后缀写成“.raw”(PS:单反相机采用的raw格式也是一种无压缩存储的形式)

    例子:

    str='january.raw';
    fid=fopen(str,'wb');
    fwrite(fid,temp1,'double');  %temp1是需要保存的矩阵,‘double’是数据精度
    fclose(fid);


    然鹅我经过试验还存在一个问题!

    假设我们经过计算得到的temp1是一个3600行*7200列的数据,同时想要保存成这样的大小,如果直接输入temp1,竟然保存的的是temp1的转置!即7200行*3600列(这可能是matlab自身矩阵是按列优先,然后和写入文件的时候有差别造成的,猜的),所以在保存之前需要将矩阵转置一下:

    temp1=temp1';


    在envi中打开图像时,编辑头文件,输入行列号,数据精度,排列方式,就可以正常显示啦!


    哈哈第一次写博客,请多多指教!

    展开全文
  • 二进制读写文件

    2017-06-21 17:16:47
    二进制文件的读写C语言源程序一、背景在日吃昂的程序书写中,测试数据的来源分很多种。...二进制文件的保存通常不用添加文件后缀名,为了区分,也可以自行添加。二、matlab写二进制文件2.1 步骤1)定义文件指针

    一、背景

    在日吃昂的程序书写中,测试数据的来源分很多种。笔者一般喜欢用C原因呢的rand指令随机产生一些数据,但是在图像处理的程序中,C语言通常是通过读写图像文件。图像文件的产生可以用matlab,一般的流程为用matlab读入图像,在保存为二进制文件。二进制文件的保存通常不用添加文件后缀名,为了区分,也可以自行添加。

    二、matlab写二进制文件

    2.1 步骤

    1)定义文件指针;2)写入

    clear all;close all;clc;
    
    image=imread('lena.bmp');
    [rows,cols]=size(image);
    vector(1,:)=reshape(image',[1,rows*cols]);
    
    fid = fopen('data','wb');
    fwrite(fid,vector(1,:),'single');

    三、C语言读二进制文件

    3.1知道文件中数据的size

    void readDataLength(float *vector, int data_length)
    {
        char flieName[50] = "data";  //文件路径
        FILE *fileIn;            //fp文件指针
        errno_t errIn;          //标记是否成功打开文件
    
        errIn = fopen_s(&fileIn, flieName, "rb"); // 成功ff=0,否则,ff!=0
        if (errIn != 0)
        {
            std::cout << "不能打开文件" << std::endl;
            return;
        }
        // 读入数据到内存中
        for (int i = 0; i < data_length; i++)
        {
            if (fread(&vector[i], sizeof(float), 1, fileIn) != 1){
                if (feof(fileIn)){
                    fclose(fileIn);
                    return;
                }
                printf("读出文件失败\n");
            }
            //fread(&vector[i], sizeof(float), 1, fileIn);
        }
        fclose(fileIn);
        std::cout << "读出文件成功!" << std::endl;
    }

    3.2不知道文件中数据的size

    对于很多文件,出于一些原因,我们不能提前知道文件中数据的size,此时可以使用c语言中的文件结束标识符feof读取文件.

    void readData(float* vector)
    {
        char flieName[50] = "b";  //文件路径
        FILE *fileIn;            //fp文件指针
        errno_t errIn;          //标记是否成功打开文件
        int i = 0;
        errIn = fopen_s(&fileIn, flieName, "rb"); // 成功ff=0,否则,ff!=0
        if (errIn != 0)
        {
            std::cout << "不能打开文件" << std::endl;
            return;
        }
    
        // 读入数据到内存中
        //for (int i = 0; i < 100000; ++i)
        //{
        //  while (!feof(fileIn))
        //  {
        //      fread(&vector[i], sizeof(float), 1, fileIn);
        //      //if (i % 10 == 0){
        //      //  printf("%d", i);
        //      //}
        //  }
        //}
        while (!feof(fileIn)){
            fread(&vector[i], sizeof(float), 1, fileIn);
            i++;
            if (i % 1000 == 0){
                printf("%d\n", i);
            }
        }
        fclose(fileIn);
        std::cout << "读出文件成功!" << std::endl;
    }

    c语言二进制写文件

    //二进制写文件
    void saveData(float *vector, int data_length)
    {
        char sXName[50] = "result";  // 文件路径
    
        FILE *fX;            //fp文件指针
        errno_t efX;            //标记是否成功打开文件
    
        efX = fopen_s(&fX, sXName, "wb");//成功ff=0,否则,ff!=0 
        if (efX != 0)
        {
            std::cout << "不能打开文件" << std::endl;
            return;
        }
    
        int eff = 0;
        for (int i = 0; i < data_length; i++)
        {
            eff = fwrite(&vector[i], sizeof(float), 1, fX);
            if (eff != 1)
            {
                std::cout << "文件写入错误" << std::endl;
                return;
            }
        }
        fclose(fX);
    
        std::cout << "已保存处理后的文件" << std::endl;
    }
    展开全文
  • 引言PHP几乎很少处理...下文讨论gif文件,我们会编写一个函数,处理的内容跟GIF图像后缀无关。当然,我们也不打算尝试PHP的GD库。gif文件头不使用任何与图像处理相关的函数,为了解决这个问题,我们得从GIF文件本...

    e51f1c69e85dd16a55df847a84aef15e.png

    引言

    PHP几乎很少处理二进制文件。但是便宜也完整的保留了这个功能。当你需要的时候,PHP自带的pack() & unpack()能能够极大地提供便利。下面我们从一个编程问题开始,讨论二进制文件的操作。

    下文讨论gif文件,我们会编写一个函数,处理的内容跟GIF图像后缀无关。当然,我们也不打算尝试PHP的GD库。

    gif文件头

    不使用任何与图像处理相关的函数,为了解决这个问题,我们得从GIF文件本身获取数据。

    与HTML、XML或其他文本格式文件不同,GIF文件和大多数其他图像格式是以二进制格式存储的。

    大多数二进制文件的顶部都有一个头文件,它提供关于特定文件的元信息。我们可以使用这些信息来查找文件的类型和其他信息,比如GIF文件的高度和宽度。

    下面显示了一个典型的原始GIF头文件,使用的是十六进制编辑器。

    标题的详细描述如下。

    de7ca01b187845c9235f5d806c366504.png

    因此,要检查图像文件是否是有效的GIF,我们需要检查文件的头3个字节,它有“GIF”标记,然后3个字节,它给出了版本号;“87a”或“89a”。

    对于这样的需求,unpack()函数是必不可少的。在查看解决方案之前,我们快速查看一下unpack()函数本身。

    使用unpack()函数

    unpack()是pack()的补充——它根据指定的格式将二进制数据转换为关联数组。

    它有点类似于sprintf,根据给定的格式转换字符串数据。

    这两个函数(pack & unpack),允许我们根据指定的格式字符串读写二进制数据缓冲区。这使编程人员能够轻松地与用其他语言,或其他格式编写的程序交换数据。

    举个小例子:

    $data = unpack('C*', 'codediesel');
    var_dump($data);
    

    这会打印以下十进制代码的“codediesel”:

    array
      1 => int 99
      2 => int 111
      3 => int 100
      4 => int 101
      5 => int 100
      6 => int 105
      7 => int 101
      8 => int 115
      9 => int 101
      10 => int 108
    

    在上面的例子中,第一个参数是格式字符串,第二个参数是实际数据。

    格式字符串指定应该如何解析数据参数。在本例中,格式“C”的第一部分指定我们应该将数据的第一个字符视为无符号字节。下一部分' * '告诉函数将前面指定的格式代码应用于所有剩余的字符。

    乍一看上去挺混乱,但是慢慢梳理你会发现其中的规律。下一节我们提供一个具体的例子。

    抓取头部数据

    下面是使用unpack()函数解决GIF问题的方法。如果给定的文件是GIF格式的,则is_gif()函数将返回true。

    function is_gif($image_file)
    {
     
        /* Open the image file in binary mode */
        if(!$fp = fopen ($image_file, 'rb')) return 0;
     
        /* Read 20 bytes from the top of the file */
        if(!$data = fread ($fp, 20)) return 0;
     
        /* Create a format specifier */
        $header_format = 'A6version';  # Get the first 6 bytes
    
        /* Unpack the header data */
        $header = unpack ($header_format, $data);
     
        $ver = $header['version'];
     
        return ($ver == 'GIF87a' || $ver == 'GIF89a')? true : false;
     
    }
     
    /* Run our example */
    echo is_gif("aboutus.gif");
    

    需要注意的重要行是格式说明符。

    ' A6 '字符指定unpack()函数获取数据的前6个字节并将其解释为字符串。然后将检索到的数据存储在一个关联数组中,该数组的键名为“version”。

    下面给出了另一个例子。

    这将返回GIF文件的一些附加头数据,包括图像的宽度和高度。

    function get_gif_header($image_file)
    {
     
        /* Open the image file in binary mode */
        if(!$fp = fopen ($image_file, 'rb')) return 0;
     
        /* Read 20 bytes from the top of the file */
        if(!$data = fread ($fp, 20)) return 0;
     
        /* Create a format specifier */
        $header_format = 
                'A6Version/' . # Get the first 6 bytes
                'C2Width/' .   # Get the next 2 bytes
                'C2Height/' .  # Get the next 2 bytes
                'C1Flag/' .    # Get the next 1 byte
                '@11/' .       # Jump to the 12th byte
                'C1Aspect';    # Get the next 1 byte
    
        /* Unpack the header data */
        $header = unpack ($header_format, $data);
     
        $ver = $header['Version'];
     
        if($ver == 'GIF87a' || $ver == 'GIF89a') {
            return $header;
        } else {
            return 0;
        }
    }
     
    /* Run our example */
    print_r(get_gif_header("aboutus.gif"));
    

    上面的示例运行后打印以下内容。

    Array
    (
        [Version] => GIF89a
        [Width1] => 97
        [Width2] => 0
        [Height1] => 33
        [Height2] => 0
        [Flag] => 247
        [Aspect] => 0
    )
    

    下面我们将详细讨论格式说明符的工作方式。我将分解格式,给出每个字符的详细信息。

    $header_format = 'A6Version/C2Width/C2Height/C1Flag/@11/C1Aspect';
    

    cc3e8aaad15c48cdd3745247fa234976.png

    更多格式选项可以在上图找到。

    写在最后

    我们展示的只是一个小小的例子,按照上图所揭示的规律,您可以任意组装成强大的解析函数。

    展开全文
  • 引言PHP几乎很少处理...下文讨论gif文件,我们会编写一个函数,处理的内容跟GIF图像后缀无关。当然,我们也不打算尝试PHP的GD库。gif文件头不使用任何与图像处理相关的函数,为了解决这个问题,我们得从GIF文件本...

    78e4e20a7a5c003d26b385a69b653960.png

    引言

    PHP几乎很少处理二进制文件。但是便宜也完整的保留了这个功能。当你需要的时候,PHP自带的pack() & unpack()能能够极大地提供便利。下面我们从一个编程问题开始,讨论二进制文件的操作。

    下文讨论gif文件,我们会编写一个函数,处理的内容跟GIF图像后缀无关。当然,我们也不打算尝试PHP的GD库。

    gif文件头

    不使用任何与图像处理相关的函数,为了解决这个问题,我们得从GIF文件本身获取数据。

    与HTML、XML或其他文本格式文件不同,GIF文件和大多数其他图像格式是以二进制格式存储的。

    大多数二进制文件的顶部都有一个头文件,它提供关于特定文件的元信息。我们可以使用这些信息来查找文件的类型和其他信息,比如GIF文件的高度和宽度。

    下面显示了一个典型的原始GIF头文件,使用的是十六进制编辑器。

    标题的详细描述如下。

    d37381f5781bef211dcb00b84dd91c61.png

    因此,要检查图像文件是否是有效的GIF,我们需要检查文件的头3个字节,它有“GIF”标记,然后3个字节,它给出了版本号;“87a”或“89a”。

    对于这样的需求,unpack()函数是必不可少的。在查看解决方案之前,我们快速查看一下unpack()函数本身。

    使用unpack()函数

    unpack()是pack()的补充——它根据指定的格式将二进制数据转换为关联数组。

    它有点类似于sprintf,根据给定的格式转换字符串数据。

    这两个函数(pack & unpack),允许我们根据指定的格式字符串读写二进制数据缓冲区。这使编程人员能够轻松地与用其他语言,或其他格式编写的程序交换数据。

    举个小例子:

    $data = unpack('C*', 'codediesel');
    var_dump($data);
    

    这会打印以下十进制代码的“codediesel”:

    array
      1 => int 99
      2 => int 111
      3 => int 100
      4 => int 101
      5 => int 100
      6 => int 105
      7 => int 101
      8 => int 115
      9 => int 101
      10 => int 108
    

    在上面的例子中,第一个参数是格式字符串,第二个参数是实际数据。

    格式字符串指定应该如何解析数据参数。在本例中,格式“C”的第一部分指定我们应该将数据的第一个字符视为无符号字节。下一部分' * '告诉函数将前面指定的格式代码应用于所有剩余的字符。

    乍一看上去挺混乱,但是慢慢梳理你会发现其中的规律。下一节我们提供一个具体的例子。

    抓取头部数据

    下面是使用unpack()函数解决GIF问题的方法。如果给定的文件是GIF格式的,则is_gif()函数将返回true。

    function is_gif($image_file)
    {
     
        /* Open the image file in binary mode */
        if(!$fp = fopen ($image_file, 'rb')) return 0;
     
        /* Read 20 bytes from the top of the file */
        if(!$data = fread ($fp, 20)) return 0;
     
        /* Create a format specifier */
        $header_format = 'A6version';  # Get the first 6 bytes
    
        /* Unpack the header data */
        $header = unpack ($header_format, $data);
     
        $ver = $header['version'];
     
        return ($ver == 'GIF87a' || $ver == 'GIF89a')? true : false;
     
    }
     
    /* Run our example */
    echo is_gif("aboutus.gif");
    

    需要注意的重要行是格式说明符。

    ' A6 '字符指定unpack()函数获取数据的前6个字节并将其解释为字符串。然后将检索到的数据存储在一个关联数组中,该数组的键名为“version”。

    下面给出了另一个例子。

    这将返回GIF文件的一些附加头数据,包括图像的宽度和高度。

    function get_gif_header($image_file)
    {
     
        /* Open the image file in binary mode */
        if(!$fp = fopen ($image_file, 'rb')) return 0;
     
        /* Read 20 bytes from the top of the file */
        if(!$data = fread ($fp, 20)) return 0;
     
        /* Create a format specifier */
        $header_format = 
                'A6Version/' . # Get the first 6 bytes
                'C2Width/' .   # Get the next 2 bytes
                'C2Height/' .  # Get the next 2 bytes
                'C1Flag/' .    # Get the next 1 byte
                '@11/' .       # Jump to the 12th byte
                'C1Aspect';    # Get the next 1 byte
    
        /* Unpack the header data */
        $header = unpack ($header_format, $data);
     
        $ver = $header['Version'];
     
        if($ver == 'GIF87a' || $ver == 'GIF89a') {
            return $header;
        } else {
            return 0;
        }
    }
     
    /* Run our example */
    print_r(get_gif_header("aboutus.gif"));
    

    上面的示例运行后打印以下内容。

    Array
    (
        [Version] => GIF89a
        [Width1] => 97
        [Width2] => 0
        [Height1] => 33
        [Height2] => 0
        [Flag] => 247
        [Aspect] => 0
    )
    

    下面我们将详细讨论格式说明符的工作方式。我将分解格式,给出每个字符的详细信息。

    $header_format = 'A6Version/C2Width/C2Height/C1Flag/@11/C1Aspect';
    

    f02269b70e3396ac5fab73dac90efa5a.png

    更多格式选项可以在上图找到。

    写在最后

    我们展示的只是一个小小的例子,按照上图所揭示的规律,您可以任意组装成强大的解析函数。

    展开全文
  • Python:二进制文件读取

    2019-12-17 16:45:11
    根据研究需要编写一个使用PCA方法对高光谱图像进行全锐化的程序,结果第一步读取文件就犯了难:给定的文件是一个二进制文件,没有文件后缀名。查阅相关资料解决问题后记录如下: 解决思路 第一步:读出文件 其实...
  • 目前支持写入的目标格式有:标准JPEG(全部格式)、BMP(24位)、TIFF(灰度和真彩)、PNG(24位)、PPM(文本和二进制模式)、PGM(文本和二进制模式)、PBM(文本和二进制模式)、PCX(24位)、PICS(24位)、SGI...
  • 用matlab自带的图像读写函数imread和imwrite往往不能直接操作,以下针对高光谱影像读取、保存图像数组以及影像分块予以说明:影像读取:利用multibandread函数,此函数用于读取多波段二进制影像文件。至于何为二进制...
  • 如何看懂bmp图像的内存存储格式

    千次阅读 2017-03-16 13:37:04
    对于bmp后缀图像文件在内存中的二进制数据应该如何识别?。假如你用UltraEdit打开一个bmp图像,所看到的是存放在内存里的二进制数据,而不是存放在硬盘里二进制数据。 二.实例 下面以一个实例分析来说明: ...
  • 第十章 文件

    2020-12-22 14:52:48
    以mp3、mp4、png等为后缀的文件都是二进制文件,如果想要打开或修改这些文件,必须通过特定软件进行,比如用Photoshop软件可以编辑图像文件。 从本质上讲,文本文件也是二进制文件,因为计算机处理的全是二进制数据...
  • Python读取.dat后缀名文件

    千次阅读 2019-11-26 21:03:40
    .dat文件基本上是没有任何头的二进制文件。对于每个样本,它由(256,256,3)个uint8图像,(64,64,1)uint8深度图和1个uint8标签组成。Tensorflow可以使用固定长度的读取器从.dat文件读取数据流。
  • 常见的文件后缀

    2012-11-01 20:09:18
    二进制文件,其用途依系统或应用而定 bmp Bitmap 位图文件,用于为Windows界面创建图标的资源文件格式。 cdr CorelDraw中的一种图形文件格式,它是所有CorelDraw应用程序中均能够使用的一种图形图像文件格式 ...
  •  该方法只能保存二进制文件,且不能保存当前数据的行列信息,文件的后缀不一定非要是bin,也可以为txt,但保存的数据都是二进制形式,直观可读性较差。  这种保存方法对数据读取有要求,需要手动指
  • 文件

    2021-01-01 15:31:25
    以mp3、mp4、png等为后缀的文件都是二进制文件,如果想要打开或修改这些文件,必须通过特定软件进行,比如用Photoshop软件可以编辑图像文件。 从本质上讲,文本文件也是二进制文件,因为计算机处理的全是二进制数据...
  • 2020-12-31

    2020-12-31 16:39:27
    以mp3、mp4、png等为后缀的文件都是二进制文件,如果想要打开或修改这些文件,必须通过特定软件进行,比如用Photoshop软件可以编辑图像文件。 从本质上讲,文本文件也是二进制文件,因为计算机处理的全是二进制数据...
  • 2020-12-17

    2020-12-17 11:33:34
    以mp3、mp4、png等为后缀的文件都是二进制文件,如果想要打开或修改这些文件,必须通过特定软件进行,比如用Photoshop软件可以编辑图像文件。 从本质上讲,文本文件也是二进制文件,因为计算机处理的全是二进制数据...
  • 2020-12-29

    2020-12-29 11:47:29
    以mp3、mp4、png等为后缀的文件都是二进制文件,如果想要打开或修改这些文件,必须通过特定软件进行,比如用Photoshop软件可以编辑图像文件。 •从本质上讲,文本文件也是二进制文件,因为计算机处理的全是二进制...
  • 包含行列数、数据类型、投影坐标信息、对应二进制文件的存储方式(BSQ、BIL、BIP)等打开图像必需的信息,由ENVI第一次读取数据文件时创建的。后缀名为hdr。 (2)二进制数据文件 通用栅格数据都会存储为二进制的...
  • 文件只根据文件名后缀判断...实际上在服务器端读过来的是个二进制流,每个图像文件的二进制流特征都不一样,大部分服务器是完全不参考上传的文件名的,而是直接分析二进制流来判断是什么图片,所以名字不重要。 ...
  • 2020-12-02

    2020-12-02 21:14:00
    以mp3、mp4、png等为后缀的文件都是二进制文件,如果想要打开或修改这些文件,必须通过特定软件进行,比如用Photoshop软件可以编辑图像文件。 3.文本文件使用字符序列来存储数据,而二进制文件使用字节序列存储数据...
  • NOIP初赛_总结

    2020-10-16 22:34:24
    文章目录小知识点总结基础知识逻辑运算和二进制运算真值,原码,反码,补码初赛数学排列组合进制转换基础技巧前缀、中缀、后缀表达式 & 表达式树树和图的性质复杂度分析组合数学 小知识点总结 d+i=&d[i] ...
  • Java判断图片文件的格式是否为jpg

    千次阅读 2010-11-26 15:22:58
    这里讨论如何通过文件的二进制流来判断一张图片是否为jpg格式的图片。对图像图像不太了解,请教了一位图像方向的同事后,大致了解了一些,这里写出来,作为笔记和分享。   原理很简单:所有JPG/JPEG格式的图片都...
  • JPEG 图片存储格式与元数据解析

    千次阅读 2019-09-03 16:27:20
    1. .jpg, .png, .gif 说到图片,我们首先会想到,几种常见图片...更准确地说,是数字图像的压缩标准(计算机上的图片都是数字图像,即由 0 和 1 构成的二进制数字图像文件)。 可能会有人不明白,为什么图片的格式...
  • 初识PGM图片

    2017-05-11 12:58:00
    1、PGM 是便携式灰度图像格式(portable graymap file format),在黑白超声图像系统中经常使用PGM格式的图像. ...P5格式的文件,每个像素用可以用二进制表示。 比如有一幅P5格式图像,灰度值可能的...
  • ENVI自带地物波谱库文件说明...ENVI的波谱库文件是以图像文件格式保存,包括一个二进制的数据文件(后缀默认.sli)和一个头文件(.hdr),当做一个图像显示时候,图像的行表示一个波谱曲线,列表示采样点(X轴波段序号),
  • 手写内容是0~9,一共有60000个图片样本,我们可以到MNIST官网免费下载,总共4个.gz后缀的压缩文件,该文件是二进制内容。 文件名 大小 用途 train-images-idx3-ubyte.gz 9.45MB 训练图像数据 ...

空空如也

空空如也

1 2 3
收藏数 43
精华内容 17
关键字:

二进制图像后缀