打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
envi二次开发中文件的读取和存储


在做程序开发时,最基本需要做的是如何编程实现文件的打开和保存,这里我们来介绍一下如何采用envi+idl的方式打开和保存一个文件

首先我们来看这么一个程序

;该程序是利用envi的二次开发功能来对数据进行处理 
;主要功能是利用envi打开文件,并将文件保存为另外一种格式 
;这个程序对于envi处理后的文件只能envi打开,其他文件打不开的情况下非常有用 
;这个程序包含了两个小程序,一个是处理单个文件,另外一个便是批处理的方式 
pro envi_savefile

    ;  filename =envi_pickfile() 
    ;envi_pickflie()打开一个文件,返回选择的文件名

      cd,'d:\test' 
      filenames=file_search('*.tif',count=n) 
     print,n,filenames 
     len=strlen(filenames[0]) 
    ;len计算文件名的长度 
  for i=0,n-1 do begin 
     filename=filenames[i] 
     envi_open_file,filename,r_fid =fid 
     ;envi_open_file,返回文件的fid 
     ;envi_select可以交互的选择文件,并返回fid 
    envi_file_query,fid,data_type=data_type, xstart=xstart, $ 
    ystart=ystart, interleave=interleave, nb=nb, nl=nl, ns=ns,$ 
   offset=offset,dims=dims 
   ;envi_file_query查询文件的头文件信息 
    map_info=envi_get_map_info(fid=fid) 
    proinfo=envi_get_projection(fid=fid) 
    ;envi_get_map_info and envi_get_projection返回图像的投影坐标信息 
    data =envi_get_data(fid=fid,dims=dims,pos=[0]) 
    ;envi_get_data是获取一个波段数据,dims是数据的范围,pos是波段;用envi_get_data的方式,一次只能打开一个波段

   ;envi_get_slice,可以获取一个数据中某一行的所有波段数据

  ;envi_enter_data,将文件输出到envi文件列表中                                                                  
;    image =strmid(filename,0,len-8)+'.tif';'tif' 
    ;同样也可以用下面这一行程序 
    image=envi_pickfile() 
    ;在打开对话框中输入文件名即可,记着加后缀 
    ; 但是利用打开对话框的方式写入img格式的话,其他软件不能识别 
;    openw,lun,image,/get_lun 
;    
;    writeu,lun,data 
;    
;    free_lun,lun 
    ;如果是保存为img格式,必须用writeu的方式写入,但是如果是tif,则用下面的命令 
    write_tiff,image,data,/float 
    envi_setup_head, fname=image, ns=ns, nl=nl, nb=nb, $ 
      data_type=data_type, offset=offset, interleave=interleave, $ 
       xstart=xstart, ystart=ystart, $ 
      descrip='iimage', /write, /open, $ 
        map_info=map_info file_type=33 

    ;将头文件信息写入新的文件 
   endfor 
end

如果采用envi_setup_head,来进行文件信息写入,要写上file_type对应的关键字,

否则的话,会导致保存的图像有个偏移,

此外ENVI_Write_ENVI_File也可以保存文件,如

ENVI_Write_ENVI_File,data,out_name=image,map_info=map_info,r_fid=fid

但是保存的文件不能被其他软件读

用ENVI_OUTPUT_TO_EXTERNAL_FORMAT也可以输出你想要的格式,并且相对于write来写更容易被其他软件接受 
;其实用write_tiff写出的文件,在erdas中不认其坐标除非是采用了geotiff=geographictypegeokey

如果是二进制文件,可以采用writeu保存,然后写入头文件

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
科学网-刘杰的博客-[转载]IDL二次开发利用envi入手练习
MODIS产品下载与数据处理小结 - 易歌的日志 - 网易博客
【Caffe实践】基于Caffe的DeepID人脸识别实现
基于Python的矿山遥感监测系统开发方法
[转载]Matlab读未知大小文件的方法
Matlab文件和数据的导入与导出 - MATLAB 基础应用 - MATLAB|MATL...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服