-
matlab将矩阵保存成遥感数据(二进制图像)
2016-12-28 11:37:32所以应该采取二进制流保存的方式,用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; }
-
sprintf 二进制_高效还是炫技?PHP解析二进制文件,就靠这俩祖传的函数,我——...
2020-12-08 21:21:53引言PHP几乎很少处理二...下文讨论gif文件,我们会编写一个函数,处理的内容跟GIF图像后缀无关。当然,我们也不打算尝试PHP的GD库。gif文件头不使用任何与图像处理相关的函数,为了解决这个问题,我们得从GIF文件本...引言
PHP几乎很少处理二进制文件。但是便宜也完整的保留了这个功能。当你需要的时候,PHP自带的pack() & unpack()能能够极大地提供便利。下面我们从一个编程问题开始,讨论二进制文件的操作。
下文讨论gif文件,我们会编写一个函数,处理的内容跟GIF图像后缀无关。当然,我们也不打算尝试PHP的GD库。
gif文件头
不使用任何与图像处理相关的函数,为了解决这个问题,我们得从GIF文件本身获取数据。
与HTML、XML或其他文本格式文件不同,GIF文件和大多数其他图像格式是以二进制格式存储的。
大多数二进制文件的顶部都有一个头文件,它提供关于特定文件的元信息。我们可以使用这些信息来查找文件的类型和其他信息,比如GIF文件的高度和宽度。
下面显示了一个典型的原始GIF头文件,使用的是十六进制编辑器。
标题的详细描述如下。
因此,要检查图像文件是否是有效的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';
更多格式选项可以在上图找到。
写在最后
我们展示的只是一个小小的例子,按照上图所揭示的规律,您可以任意组装成强大的解析函数。
-
fread读二进制文件_高效还是炫技?PHP解析二进制文件,就靠这俩祖传的函数,我——...
2021-01-20 00:15:09引言PHP几乎很少处理二...下文讨论gif文件,我们会编写一个函数,处理的内容跟GIF图像后缀无关。当然,我们也不打算尝试PHP的GD库。gif文件头不使用任何与图像处理相关的函数,为了解决这个问题,我们得从GIF文件本...引言
PHP几乎很少处理二进制文件。但是便宜也完整的保留了这个功能。当你需要的时候,PHP自带的pack() & unpack()能能够极大地提供便利。下面我们从一个编程问题开始,讨论二进制文件的操作。
下文讨论gif文件,我们会编写一个函数,处理的内容跟GIF图像后缀无关。当然,我们也不打算尝试PHP的GD库。
gif文件头
不使用任何与图像处理相关的函数,为了解决这个问题,我们得从GIF文件本身获取数据。
与HTML、XML或其他文本格式文件不同,GIF文件和大多数其他图像格式是以二进制格式存储的。
大多数二进制文件的顶部都有一个头文件,它提供关于特定文件的元信息。我们可以使用这些信息来查找文件的类型和其他信息,比如GIF文件的高度和宽度。
下面显示了一个典型的原始GIF头文件,使用的是十六进制编辑器。
标题的详细描述如下。
因此,要检查图像文件是否是有效的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';
更多格式选项可以在上图找到。
写在最后
我们展示的只是一个小小的例子,按照上图所揭示的规律,您可以任意组装成强大的解析函数。
-
Python:二进制文件读取
2019-12-17 16:45:11根据研究需要编写一个使用PCA方法对高光谱图像进行全锐化的程序,结果第一步读取文件就犯了难:给定的文件是一个二进制文件,没有文件后缀名。查阅相关资料解决问题后记录如下: 解决思路 第一步:读出文件 其实... -
e语言-图像格式转换源码 文件后缀没有做判断处理
2019-08-23 10:29:56目前支持写入的目标格式有:标准JPEG(全部格式)、BMP(24位)、TIFF(灰度和真彩)、PNG(24位)、PPM(文本和二进制模式)、PGM(文本和二进制模式)、PBM(文本和二进制模式)、PCX(24位)、PICS(24位)、SGI... -
16进制的两位数转换不了 matlab_MATLAB高光谱影像处理
2021-01-05 21:55:03用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应用程序中均能够使用的一种图形图像文件格式 ... -
python中对numpy数组的保存(图像分析image2array后保存数组可用于进一步数据分析)
2017-09-25 08:38:20该方法只能保存二进制文件,且不能保存当前数据的行列信息,文件的后缀不一定非要是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软件可以编辑图像文件。 •从本质上讲,文本文件也是二进制文件,因为计算机处理的全是二进制... -
envi标准格式和tiff格式的区别
2020-11-14 20:16:21包含行列数、数据类型、投影坐标信息、对应二进制文件的存储方式(BSQ、BIL、BIP)等打开图像必需的信息,由ENVI第一次读取数据文件时创建的。后缀名为hdr。 (2)二进制数据文件 通用栅格数据都会存储为二进制的... -
直接更改图片文件jpg和png文件扩展名
2020-08-16 20:21:29文件只根据文件名后缀判断...实际上在服务器端读过来的是个二进制流,每个图像文件的二进制流特征都不一样,大部分服务器是完全不参考上传的文件名的,而是直接分析二进制流来判断是什么图片,所以名字不重要。 ... -
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:201. .jpg, .png, .gif 说到图片,我们首先会想到,几种常见图片...更准确地说,是数字图像的压缩标准(计算机上的图片都是数字图像,即由 0 和 1 构成的二进制数字图像文件)。 可能会有人不明白,为什么图片的格式... -
初识PGM图片
2017-05-11 12:58:001、PGM 是便携式灰度图像格式(portable graymap file format),在黑白超声图像系统中经常使用PGM格式的图像. ...P5格式的文件,每个像素用可以用二进制表示。 比如有一幅P5格式图像,灰度值可能的... -
ENVI自带地物波谱库文件说明和查看(以ENVI5.3为例)
2021-01-31 09:41:13ENVI自带地物波谱库文件说明...ENVI的波谱库文件是以图像文件格式保存,包括一个二进制的数据文件(后缀默认.sli)和一个头文件(.hdr),当做一个图像显示时候,图像的行表示一个波谱曲线,列表示采样点(X轴波段序号), -
tensorflow和keras搭建DNN、CNN、RNN手写数字识别
2019-07-19 17:37:00手写内容是0~9,一共有60000个图片样本,我们可以到MNIST官网免费下载,总共4个.gz后缀的压缩文件,该文件是二进制内容。 文件名 大小 用途 train-images-idx3-ubyte.gz 9.45MB 训练图像数据 ...
-
blackedge:Tienda在线“ BlackEdge”商店-源码
-
基于声卡的CAPs阈值和调谐曲线的快速方法
-
axios 请求的拦截器
-
tbot:用于嵌入式Linux开发的AutomationTesting工具-源码
-
SPRING-LOGIN-OAUTH2-源码
-
《网易云音乐》需求文档.docx
-
C# winform TreeView递归文件夹
-
Hypervisor.html
-
Amoeba 实现 MySQL 高可用、负载均衡和读写分离
-
高功率微波大气击穿区域分布
-
自动注释:自动可视化注释。自动化可视化标注-源码
-
Galera 高可用 MySQL 集群(PXC v5.6 + Ngin
-
比特币数量:-源码
-
access应用的3个开发实例
-
云开发后台+微信扫码点餐小程序+cms网页管理后台 含后厨端和用户端
-
剑指 Offer 12. 矩阵中的路径(DFS + 剪枝)
-
cart263:CART263的课程作业存储库-源码
-
【HTML5&CSS3进阶学习02】Header的实现·CSS中的布局
-
使用者介面-源码
-
思科非程序员2021年3月-源码