精华内容
下载资源
问答
  • 所以应该采取二进制流保存的方式,用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自身矩阵是按列优先,然后和写入文件的时候有差别造成的,猜的),所以在保存之前需要将矩阵转置一下:

    <

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

    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;
    }
    展开全文
  • Python:二进制文件读取

    2019-12-17 16:45:11
    根据研究需要编写一个使用PCA方法对高光谱图像进行全锐化的程序,结果第一步读取文件就犯了难:给定的文件是一个二进制文件,没有文件后缀名。查阅相关资料解决问题后记录如下: 解决思路 第一步:读出文件 其实...

    问题背景

    根据研究需要编写一个使用PCA方法对高光谱图像进行全锐化的程序,结果第一步读取文件就犯了难:给定的文件是一个二进制文件,没有文件后缀名。查阅相关资料解决问题后记录如下:


    解决思路

    第一步:读出文件

    其实对于文件单纯的读取还是非常好解决的。只要使用如下语句即可把文件读取出到变量temp中:

    如果对open函数的参数mode不熟悉,可以查阅:https://www.runoob.com/python/python-func-open.html

    此处我们需要以二进制方式读取该文件,因此mode=‘rb'

        with open(filename, mode='rb') as file:
            temp = file.read()
        file.close()

    但是这样读出的temp是一个二进制串,类似:

    \x00\x06\xa7@\x00\x00\x00\x00\x00`\xa5

    因此我们还需要对结果进行unpack操作。

    第二步:文件转码

    在python的struct库中提供了方法unpack,它可以将二进制串以自定的形式转换成用户想要的字符串。

    您可以查看官方文档https://docs.python.org/zh-cn/3/library/struct.html以获取更多信息。

    但在此处,我们已知我们的数据是以float类型,小端方式存储的,因此编写出来的程序如下:

        data = struct.unpack("<" + "d" * (len(temp) // 8), temp[:])
    

    其中,"<"代表以小端方式解构;

               “d" * (len(temp) // 8)代表构造出temp // 8 大小的缓存区,且这个缓存区的格式是”dd····d“,即全为float类型的数据,unpack()函数会以此缓存区的格式对二进制数据进行解构。

    至此文件读取和转码均已完成,如果您要解码的文件格式有所不同,请根据unpack()官方文档查找相应参数并修改。


    总结

    将我们上述的代码组合起来,可以得到输入为文件地址(即如下程序所示的filename),返回该二进制文件转码后数据的函数load_binary_file()如下:

    import struct
    
    
    def load_binary_file(filename):
        """
        用于读取二进制文件的函数
        """
        # 二进制文件,读取使用rb
        with open(filename, mode='rb') as file:
            temp = file.read()
        file.close()
    
        # 使用unpack函数将二进制数据转码,注意使用的读取是小端存储的,而且是double类型8字节转码
        data = struct.unpack("<" + "d" * (len(temp) // 8), temp[:])
    
        return data

    注:该函数只能对文件内全是float数据的二进制文件使用,如格式不对,请修改

        data = struct.unpack("<" + "d" * (len(temp) // 8), temp[:])
    

     之后便可以使用输出的data进行数据处理操作了。

    如果您想要了解更多关于我使用PCA进行高光谱图像全锐化的代码(截至2019/12/19尚未完成),可以访问我的GitHub:https://github.com/pingdixiaoguai/pan_sharpening

    本人也是第一次写博文,如有不足,还请指教。

    展开全文
  • JPEG文件二进制格式分析

    万次阅读 2018-12-29 21:13:41
    python中要识别图像信息用于机器学习等的话,使用opencv和numpy就可以了,简单快捷。 目录 分块 FFD8、FFD9-SOI、EOI-文件开始与结束 FFE0-APP0-图像识别信息 ...FFDB-DQT-定义量化表 ...它的二进制形式...

    python中要识别图像信息用于机器学习等的话,使用opencv和numpy就可以了,简单快捷。


    目录

    分块

    FFD8、FFD9-SOI、EOI-文件开始与结束

    FFE0-APP0-图像识别信息

    FFDB-DQT-定义量化表

    FFC0-SOF0-图像基本信息

    FFC4-DHT-定义Huffman表

    FFDA-SOS-扫描行开始


    以一张随手创建的简单图片为例:

    它的二进制形式(开头部分)如下:

    当然,这其实是十六进制。二进制指的是计算机中按二进制数进行存储,为了便于查看显示为十六进制而已。

    如何查看二进制形式:

    把文件的后缀名去掉,然后用Sublime或UltraEdit等打开即可。注意如果用记事本或notepad++等打开的话可能会乱码。


    分块

    JPEG文件内部分为若干块,这些块由ff开头(截图中已标出部分),ff后紧跟的一个标记符指明了这个块的类型。

    这些分块按出现顺序分别是:

    SOIff d8文件开始
    APP0ff e0定义交换格式和图像识别信息
    DQTff db定义量化表
    SOF0ff c0帧开始
    DHTff c4霍夫曼(Huffman)表
    SOSff da扫描行开始
    EOIff d9文件结束

    首先是两个比较简单和特殊的块:

    FFD8、FFD9-SOI、EOI-文件开始与结束

    名称二进制数含义
    SOIff d8文件开始
    EOIff d9文件结束

    需要注意截图中Sublime自动按两个字节一组显示的,但实际上ff并不一定只出现在第单数个字节处,有可能ff和标记符间隔着一个空格。

    (也就是说你按[标记符+空格]进行搜索,不一定能找到全部的分块)


    FFE0-APP0-图像识别信息

    0010指该块长度为16个字节(不包括ffe0)

    4a46 4946 00是JFIF格式标识码

    01 01是版本号(第一个01是主版本号,第二个01是次版本号)

    01是单位(00=无单位;01=点数/英寸;02=点数/厘米)

    0078为水平分辨率

    0078为竖直分辨率

    00为水平点数

    00为竖直点数


    FFDB-DQT-定义量化表

    一共有两个DQT块,它们ffdb后面都紧跟着一个0043,意味着这两个DQT块的长度(不包括ffdb)都为67个字节。

    DQT块定义了图像的量化表,参与到图像的压缩中,我没有用到这一部分,暂时不讲(以后用到了再补)


    FFC0-SOF0-图像基本信息

    同样的,0011指示了SOF0块长度为17个字节。

    前8个字节分别为:

    字节数示例中的值示例中的含义
    20011SOF0块长度为17个字节
    108每个像素的每个颜色分量为8位
    202 0d图片高度为525(直接换算成十进制)
    202 5a图片宽度602(直接换算成十进制)
    103组件数量为3

    JPEG一般采用yCrCb格式,因此最后的组件数量通常为3(每个组件就是像素的一个颜色分量)

    y指的是亮度;Cr指的是红色分量;Cb指的是蓝色分量。

    每个组件包含三个字节:

    101  |  02  |  0301=Y;02=Cb;03=Cr;04=I;05=Q
    122  |  11  |  110~3位=竖直采样系数;4~7位=水平采样系数
    100  |  01  |  01量化表号

    第一个字节指示这个组件是什么,除了之前说的y、Cr、Cb以外,还有I和Q。

    I和Q是YIQ色彩空间中使用的,y是亮度,I代表In-phase,色彩从橙色到青色,Q代表Quadrature-phase,色彩从紫色到黄绿。


    FFC4-DHT-定义Huffman表

    示例中共有4张Huffman表,分别为亮度AC(交流)、亮度DC(直流)、色度AC、色度DC。

    (暂时没弄太明白,之后补充)


    FFDA-SOS-扫描行开始

    紧跟着ffda的000c描述段长度,值为6+[组件数量],这里组件数量为3。

    之后的03表示组件数量为3,这里的值必须在1到4之间。

    01表示组件号码为1(y),00的0-3位:AC表号 (值=0~3),4-7位:DC表号(值=0~3)

    在SOS后记录的就是图像数据,从左到右从上到下依次排列。(是经过压缩算法处理过后的)

     

     

    展开全文
  • 读取二进制影像文件,使用gdal.Open(path)即可读取,path不需要加入后缀名 读取得到的数组 的 dtype为complex64 提取复数的实部和虚部进行后续计算 import gdal def img2array(path): dataset = gdal.Open(path) ...
  • 玩转前端二进制

    2020-07-08 17:00:00
    本文阿宝哥将按照以下的流程来介绍前端如何进行图片处理,然后穿插介绍二进制、Blob、Blob URL、Base64、Data URL、ArrayBuffer、TypedArray、Dat...
  • 关于二进制的文件读写。
  • php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】发布于 2017-08-16 07:15:43 | 93 次阅读 | 评论: 0 | 来源: 网友投递PHP开源脚本语言PHP(外文名: Hypertext Preprocessor,中文名:“超...
  • 在计算机系统中,通常将十进制数作为人机交互的媒介,而数据则以二进制数的形式存储和运算。 计算机采用二进制的主要原因有以下几点: (1)易于物理实现 二进制在技术上最容易实现。这是因为具有两种稳定状态的...
  • 文本文件与二进制文件区别

    千次阅读 2018-11-15 13:50:18
    ... 1)文本文件:这类文件以文本的ASCII码形式存储在计算机中。它是以"行"为基本结构的一种信息组织和存储方式。  2)二进制文件:这类文件以文本的二进制形式...二进制文件一般是可执行程序、图形、图像...
  • Qt 学习 之 二进制文件读写

    万次阅读 2015-06-11 16:59:26
    同时,Qt 还提供了更高一级的操作:用于二进制的流QDataStream和用于文本流的QTextStream。本节,我们将讲解有关QDataStream的使用以及一些技巧。下一章则是QTextStream的相关内容。QDataStream提供了基于Q
  • 在上一章中,我们介绍了有关QFile和QFileInfo两个类的使用。我们提到,QIODevice提供了read...同时,Qt 还提供了更高一级的操作:用于二进制的流QDataStream和用于文本流的QTextStream。本节,我们将讲解有关QDataS...
  • Python大数据分析过程中,使用Pandas实践 HDF5高效二进制存储,以及使用vitables快速浏览H5格式二进制数据。
  • //如果后台只保存二进制数据应该不行,至少还要有文件名(包含后缀)的信息 // 将图像输出到Servlet输出流中。 ServletOutputStream sos = response.getOutputStream(); sos.write(bb, 0, bb.length); //这...
  • 【杂谈与乱码】操作系统和二进制 本人(ID:蒸发杰作)旗下所有文章均放弃版权,请任意使用。只是如果您觉得,看了我的文章,有所收获的话,不妨点个赞,写个评论。这是对我最大的支持。 ​ ——...
  • C++/C 文件二进制读写

    2017-11-07 22:02:56
    C++/C 文件二进制读写 原创 2014年08月20日 18:44:46 标签:
  • 在对语法元素进行编码前,需要对语法元素进行二进制化(使用二进制符号0或1表示)。VVC中常用的二进制化方法包括截断莱码(truncated Rice (TR))、截断二进制码(truncated binary (TB))、k阶指数哥伦布码(the k-...
  • linux二进制分发软件包的安装和卸载

    千次阅读 2016-04-11 09:43:18
    下面就来周详地讲一讲linux软件的安装和卸载:一、linux二进制分发软件包的安装和卸载Linux软件的二进制分发是指事先已编译好二进制形式的软件包的发布形式,其长处是安装使用容易,缺点则是缺乏灵活性,假如该...
  • 通过二进制头识别文件类型,可以使用UE或者WinHex软件打开 1.JPEG/JPG - 文件头标识 (2 bytes): $ff, $d8 (SOI) (JPEG文件标识) - 文件结束标识 (2 bytes): $ff, $d9 (EOI) 2.TGA - 未压缩的前5字节 0...
  • 首先放出大佬的博客:树状数组树状数组 树状数组树状数组中的二进制使用的很多,很多都是使用位运算来实现的。 说到树状数组,我们就可以知道线段树, 两者之间是有相同点的,但是也是有一些不同点的,列举如下: ...
  • 机器语言:(二进制语言)是用二进制代码表示的计算机语言。能直接识别和执行的一种机器指令的集合。不同机器的机器语言不同。机器语言具有灵活、直接执行和速度快等特点。 (如: 10100010010111100011代表的是A=B...
  • 在上一章中,我们介绍了... 还提供了更高一级的操作:用于二进制的流QDataStream和用于文本流的QTextStream。本节,我们将讲解有关QDataStream的使用以及一些技巧。下一章则是QTextStream的相关内容。 QDataStrea
  • Qt之文件详解(二)二进制文件读写

    千次阅读 2017-02-08 14:48:36
    同时,Qt 还提供了更高一级的操作:用于二进制的流QDataStream和用于文本流的QTextStream。本节,我们将讲解有关QDataStream的使用以及一些技巧。下一章则是QTextStream的相关内容。 QDataStream提
  • Qt 二进制文件读写

    2016-09-27 14:31:00
    二进制格式是人不可读的,并且通常具有相同的后缀名(比如 dat 之类),因此我们没有办法区分两个二进制文件哪个是合法的。所以,我们定义的二进制格式通常具有一个魔术数字,用于标识文件的合法性。在本例中,我们...
  • 将文件转换成二进制方法: /// /// 将文件转换成二进制 /// /// 文件路径 /// public static byte[] ConvertToBinary(string Path) { FileStream stream = new FileInfo(Path).OpenRead(); byte[]
  • 在上一章中,我们介绍了有关QFile和QFileInfo两个类的使用。我们提到,QIODevice提供了read()、readLine()等基本的操作。... 还提供了更高一级的操作:用于二进制的流QDataStream和用于文本流的QTextStream
  • 除了文本文件之外,其他需要按照一定的格式定义读写的文件都称为二进制文件。 每种格式的二进制文件都有自己的格式定义,写入数据时按照一定的顺序写入,读出时也按照相应的顺序读出。 例如地球物理中常用的 SEG-Y ...
  • 因为仅仅通过后缀名我们并不能得知用户是否把图片的类型更改为其他类型. public enum ImageType { PNG('P','N','G','-',"PNG"), JPG('J','F','I','F',"JPG"), GIF('G','I','F','-',"GIF"); private char begin,...
  • 转载地址:VC在Sql Server数据库中如何存取二进制图片信息 http://blog.hehehehehe.cn/a/1396.htm 在VC6.0中我们通常用Ado的Field 对象的GetChuck和AppendChunk来读写Blob对象,但是这样做要写很多的代码,其实ado...
  • CVS处理二进制文件的import问题

    千次阅读 2008-09-19 09:23:00
    参考:http://man.chinaunix.net/develop/cvsdoc_zh/Wrappers.html#Wrappers实验证明wincvs在这方面做得还算不错,不过具体是...我们当然期望cvs能自动地,基于内容对我们要提交的文件进行二进制判断。但CVS的官方文章

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,936
精华内容 4,374
关键字:

二进制图像后缀