C/C++下读取ENVI栅格文件格式

devtools/2024/10/21 21:02:14/

 ENVI使用的是通用栅格数据格式,包含一个简单的二进制文件( a simple flat binary )和一个相关的ASCII(文本)的头文件。

   利用其他语言如C/C++等直接读取ENVI的数据,则可以先对hdr文件进行解析,获取数据类型。

   hdr的文件结构如下,

ENVIdescription = {Canon City, Colorado, Landsat TM, Calibrated to Reflectance }samples = 640lines   = 400bands   = 6header offset = 0file type = ENVI Standarddata type = 1interleave = bsqsensor type = Landsat TMwavelength units = Micrometersz plot range = {0.00, 100.00}z plot titles = {Wavelength, Reflectance}band names = {TM Band 1, TM Band 2, TM Band 3, TM Band 4, TM Band 5, TM Band 7}wavelength = {0.48500, 0.56000, 0.66000, 0.83000, 1.65000, 2.21500}

解析的关键信息有samples:640(列),lines:400(行),header offset:0(头信息偏移量-单位为字节),data type=1(数据类型代码,见下表)。

数据类型

代码

字节型

1

16位有符号整型

2

32位有符号长整型

3

32位无符号长整型

13

浮点型

4

双精度浮点型

5

对常用数据类型文件进行了读写的测试,值完全一致。

   利用IDL进行文件写出:

;+;C++读取ENVI格式技术测试代码; :输出不同数据类型的二进制文件;; Author: DYQ 2011年6月2日;; BBS: http://bbs.esrichina-bj.cn/ESRI/forum-28-1.html; E-Mail: dongyq@esrichina-bj.cn; Blog: http://hi.baidu.com/dyqwrp;-PRO test_out_binoutdir = 'c:\temp\'if file_test(outdir,/directory) ne 1 then file_mkdir,outdir;字节byteOPENW,lun,outdir+'a.dat',/get_lunWRITEU,lun,BINDGEN(10)FREE_LUN,lun;整型intOPENW,lun,outdir+'b.dat',/get_lunWRITEU,lun,INDGEN(10)FREE_LUN,lun;浮点floatOPENW,lun,outdir+'c.dat',/get_lunWRITEU,lun,FINDGEN(10)FREE_LUN,lun;长整型longOPENW,lun,outdir+'d.dat',/get_lunWRITEU,lun,LINDGEN(10)FREE_LUN,lun;双精度doubleOPENW,lun,outdir+'e.dat',/get_lunWRITEU,lun,DINDGEN(10)FREE_LUN,lunEND


//;C++读取ENVI格式技术测试代码#include "stdafx.h"#include "iostream.h"int main(int argc, char* argv[]){printf("Hello ! Successful Using C++! ^_^ \n");int i,n;FILE*fp;//二进制字节型char *bdata=new char[10];fp=fopen("c:\\temp\\a.dat","rb");n=fread(bdata,1,10,fp);fclose(fp);for(i=0;i<10;i++){cout<<"二进制";cout<<i<<":"<<short(bdata[i])<<endl;}//二进制整型文件short int *idata=new short int[10];fp=fopen("c:\\temp\\b.dat","rb");n=fread(idata,2,10,fp);fclose(fp);for(i=0;i<10;i++){cout<<"整型";cout<<i<<":"<<idata[i]<<endl;}//二进制浮点文件float *fdata=new float[10];fp=fopen("c:\\temp\\c.dat","rb");n=fread(fdata,4,10,fp);fclose(fp);for(i=0;i<10;i++){cout<<"浮点";cout<<i<<":"<<fdata[i]<<endl;}//二进制长整型文件long *ldata=new long[10];fp=fopen("c:\\temp\\d.dat","rb");n=fread(ldata,4,10,fp);fclose(fp);for(i=0;i<10;i++){cout<<"长整型";cout<<i<<":"<<ldata[i]<<endl;}//双精度doubledouble *ddata=new double[10];fp=fopen("c:\\temp\\e.dat","rb");n=fread(ddata,8,10,fp);fclose(fp);for(i=0;i<10;i++){cout<<"双精度型";cout<<i<<":"<<ddata[i]<<endl;}return 0;}

推荐文章:C/C++下读取ENVI栅格文件格式 - ENVI-IDL技术殿堂 - 博客园

关于ENVI遥感影像的hdr元数据信息设置与读取(C++ 、Python)_envi hdr数据-CSDN博客

FR:徐海涛(hunkxu)


http://www.ppmy.cn/devtools/127648.html

相关文章

抢单超卖? 并发问题解决思路

1. 问题介绍 在用户抢单或者商品售卖的过程中&#xff0c;正常情况下是一人一件&#xff0c;但是当网络流量剧增时多个用户同时抢到一个商品应该如何分配&#xff1f;假设这样一个场景A商品库存是100个&#xff0c;但是秒杀的过程中&#xff0c;一共卖出去500个A商品。对于卖家…

【前端】制作一个自己的网页(4)

刚才我们完成了网页中标题与段落元素的学习。在实际开发时&#xff0c;一个网页通常会包含多个相同元素&#xff0c;比如多个标题与段落。 对于相同标签的元素&#xff0c;我们又该如何区分定位呢&#xff1f; 对多个相同的标签分类 比如右图设置了七个段落元素&#xff0c;它…

【机器学习】任务七:聚类算法 (K-means 算法、层次聚类、密度聚类对鸢尾花(Iris)数据进行聚类)

目录 1.基础知识 1.1 K-Means 算法 1.2 层次聚类&#xff08;Hierarchical Clustering&#xff09; 1.3 密度聚类&#xff08;DBSCAN&#xff09; 1.4 距离和相似度度量方法 1.5 总结&#xff1a; 2.K-means 算法对鸢尾花&#xff08;Iris&#xff09;数据进行聚类 2.1…

预训练模型通过 prompt(提示)生成的“软标签”是什么

预训练模型通过 prompt&#xff08;提示&#xff09;生成的“软标签”是指模型在处理输入数据时输出的概率分布&#xff0c;而不是明确的、唯一的硬标签。 什么是“软标签”&#xff1f; 软标签&#xff08;Soft Label&#xff09;通常指的是模型预测结果中输出的概率分布。例…

红黑树实现(附C++源码)

游凡/红黑树https://gitee.com/you-fan-a/red-black-tree 一、什么是红黑树 遵循 一定规则&#xff0c;每个节点都有颜色且都是红色或黑色的搜索二叉树就是红黑树。 红黑树的平衡性和查找效率不如AVL树&#xff0c;但是插入和删除比AVL树要强。 二、红黑树的规则 1、红黑树…

[JAVAEE] 线程安全的案例(一)-单例模式

目录 一. 单例模式 二. 单例模式的使用时机 三. 单例模式的关键代码 四. 单例模式的几种实现方式 4.1 饿汉方式(急) 4.2 懒汉模式(缓) a. 解决原子性的问题 b. 解决程序运行效率低下的问题 c. 解决指令重排序的问题(其次是为了解决内存可见性的问题) 五. 总结 一. …

.net framework 3.5sp1安装错误卡住不动怎么解决

解决 .NET Framework 3.5 SP1 安装错误卡住的问题&#xff0c;可以尝试以下几种方法&#xff1a; 1.使用 DISM 工具&#xff1a; 将下载的 NetFx3.cab 文件放置在 C:\Windows 文件夹下。 以管理员身份打开命令提示符&#xff0c;输入以下命令&#xff1a; dism /online /En…

Python知识点:基于Python工具,如何使用Brownie进行智能合约测试

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; 如何使用Brownie进行智能合约测试 在以太坊智能合约开发中&#xff0c;测试是至…