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

 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.mzph.cn/news/883043.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库,index是干啥的,索引在什么时候会出现失效,索引建多了有啥坏处

index是索引 索引好处1.帮助用户提高查询速度 2.利用索引的唯一性来控制记录的唯一性 3.可以加速表与表之间的连接 4.降低查询中分组和排序的时间 索引在什么时候会出现失效 1.如果条件中有or&#xff0c;即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因) …

BurpSuit 安装Jpython 和Json-Hunter脚本

0x00下载Jpython jpython2.7.2下载的人最多&#xff0c;所以我就安装2.7.2了 Central Repository: org/python/jython-standalone/2.7.2 点击下载即可。 0x01BP设置jpython环境 重点&#xff1a;Jpython和Jsonp-Hunter一定要放在英文目录下。 0x02安装Jsonp-Hunter https:…

【Java并发编程三】多线程案例(手撕单例模式,阻塞队列,定时器,线程池)

目录 多线程案例 1.单例模式 饿汉模式 懒汉模式 2.阻塞队列 生产者消费者模型 阻塞队列的实现 3.定时器 标准库中的定时器 实现自己的定时器 4.线程池 标准库中的线程池 实现一个自己的线程池 多线程案例 1.单例模式 单例模式是校招中最常考的设计模式之一。 啥…

基于Python和OpenCV的疲劳检测系统设计与实现

项目运行 需要先安装Python的相关依赖&#xff1a;pymysql&#xff0c;Django3.2.8&#xff0c;pillow 使用pip install 安装 第一步&#xff1a;创建数据库 第二步&#xff1a;执行SQL语句&#xff0c;.sql文件&#xff0c;运行该文件中的SQL语句 第三步&#xff1a;修改源…

《Windows PE》6.4.2 远程注入DLL

实验四十七&#xff1a;远程注入DLL 写一个窗口程序&#xff0c;将一个dll通过远程注入的方法&#xff0c;注入到第三章的示例程序PEHeader.exe中&#xff0c;支持32位和64位PE。 ●dll.c /*------------------------------------------------------------------------FileNam…

《PP-OCRv1》论文精读:PaddleOCR是目前SOTA级别的OCR开源技术(截止2024年10月)

PP-OCR: A Practical Ultra Lightweight OCR System论文地址PP-OCRv2: Bag of Tricks for Ultra Lightweight OCR System论文地址PP-OCRv3: More Attempts for the Improvement of Ultra Lightweight OCR System论文地址PaddleOCR Github OCR工具库 43.5K个star PP-OCRv1由百度…

矩阵基础知识

矩阵定义 矩阵的定义 1.矩阵是由一组数按照矩形排列而成的数表。矩阵通常用大写字母表示&#xff0c;例如 AA、BB 等。矩阵中的每个数称为矩阵的元素或元。 一个 mn的矩阵 AA 可以表示为&#xff1a; 其中 aij表示矩阵 A中第i行第j列的元素。 矩阵的维度 1.矩阵的维度由它…

经典功率谱估计的原理及MATLAB仿真(自相关函数BT法、周期图法、bartlett法、welch法)

经典功率谱估计的原理及MATLAB仿真&#xff08;自相关函数BT法、周期图法、bartlett法、welch法&#xff09; 文章目录 前言一、BT法二、周期图法三、Bartlett法四、welch法五、MATLAB仿真六、MATLAB详细代码总结 前言 经典功率谱估计方法包括BT法&#xff08;对自相关函数求傅…

python实现onvif协议下控制摄像头变焦,以及融合人形识别与跟踪控制

#1024程序员节 | 征文# 这两天才因为项目需要&#xff0c;对网络摄像头的视频采集以及实现人形识别与跟踪技术。对于onvif协议自然起先也没有任何的了解。但是购买的摄像头是SONY网络头是用在其他地方的。因为前期支持探究项目解决方案&#xff0c;就直接拿来做demo测试使用。 …

react18中在列表项中如何使用useRef来获取每项的dom对象

在react中获取dom节点都知道用ref&#xff0c;但是在一个列表循环中&#xff0c;这样做是行不通的&#xff0c;需要做进一步的数据处理。 实现效果 需求&#xff1a;点击每张图片&#xff0c;当前图片出现在可视区域。 代码实现 .box{border: 1px solid #000;list-style: …

微前端架构新选择:micro-app 框架一文全解析

目录 前言技术方案沙箱withiframe 环境变量主应用生命周期子应用生命周期初始化更新卸载缓存 JS 沙箱样式隔离元素隔离路由系统⭐数据通信⭐资源系统预加载umd 模式其他功能调试工具 前言 https://micro-zoe.github.io/micro-app/ micro-app 是由京东前端团队推出的一款微前端…

基于springboot美食商城推荐系统

基于springboot美食商城推荐系统 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;idea 源码获取&#xff1a;https://downlo…

iOS调试真机出现的 “__llvm_profile_initialize“ 错误

一、错误形式&#xff1a; app启动就崩溃&#xff0c;如下&#xff1a; Demo__llvm_profile_initialize:0x1045f7ab0 <0>: stp x20, x19, [sp, #-0x20]!0x1045f7ab4 <4>: stp x29, x30, [sp, #0x10]0x1045f7ab8 <8>: add x29, sp, #0x100x1…

java写一个MD5加密工具

下面是一个简单的 Java MD5 加密工具的实现。这个工具可以用于对输入的字符串进行 MD5 加密&#xff0c;并返回加密后的结果。 MD5 加密工具类 import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;public class MD5Util {/*** 使用 MD5 算法加…

SELinux中的安全标记与强制访问控制

SELinux的安全标记和强制访问控制是如何实现的&#xff1f; SELinux&#xff08;Security Enhanced Linux&#xff09;是一个由美国国家安全局&#xff08;NSA&#xff09;开发的Linux内核模块&#xff0c;它实现了强制访问控制&#xff08;MAC&#xff09;。SELinux通过为系统…

工伤认定流程和赔付标准

一、应当认定为工伤的规定 《工伤保险条例》第十四条规定&#xff1a;职工有下列情形之一的&#xff0c;应当认定为工伤&#xff1a; 1、在工作时间和工作场所内&#xff0c;因工作原因收到事故伤害的&#xff1b; 2、工作时间前后在工作场所内&#xff0c;从事与工作有关的预…

第10节 arkTS GridRow

在 ArkTS 中&#xff0c; GridRow 是 Grid 布局系统中的一个重要组成部分&#xff0c;用于定义网格布局中的行。以下是关于 GridRow 的详细介绍&#xff1a; 基本概念 Grid 布局将容器划分为行和列的网格结构&#xff0c; GridRow 则负责确定每行的属性和布局方式。…

物联网平台是什么?

在数字化时代&#xff0c;物联网&#xff08;Internet of Things&#xff0c;简称IoT&#xff09;已经成为推动社会进步和产业升级的重要力量。物联网平台&#xff0c;作为连接物理世界与数字世界的桥梁&#xff0c;正逐渐成为智能设备、数据和服务的中心枢纽。本文将带你深入了…

Mochi 1视频生成模型亮相:动作流畅,开放源代码

前沿科技速递&#x1f680; 近日&#xff0c;AI公司Genmo发布了最新的开源视频生成模型Mochi 1。Mochi 1在动作质量和提示词遵循能力方面有显著提升&#xff0c;并且与市面上许多闭源商业模型相媲美。作为一款支持个人和商业用途的开源工具&#xff0c;Mochi 1不仅展示了开源技…

UEFI EDK2框架学习 (四)——UEFI图形化

一、修改protocol.c #include <Uefi.h> #include <Library/UefiLib.h> #include <Library/UefiBootServicesTableLib.h> #include <stdio.h>EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable ) {EFI_STATUS S…