ENVI;启动envi file=envi_pickfile();选择文件dialog,返回值就为file ENVI_OPEN_FIle,file,r_fid=fid;根据文件名打开file,并且返回fid envi_file_query,fid,NB=NB,NL=NL,NS=NS,dims=dims,data_type=dt,bnames=bnames;根据fid查询图像信息 data=envi_get_data(fid=fid,dims=dims,pos=0)根据fid得到数据dims:维度 window,1,xsize=798,ysize=909l;新建一个window窗体 tv,data;显示数据 tvscl,data;拉伸显示 tvscl,data,/order;idl中左下角为原点,envi中是左上角 envi,/restore_base_save_files ;不启动ENVI调用功能 envi_batch_init:批处理初始化 .e canny.pro;跳转到canny.pro文件 完整工程文件----定义一个button,并添加事件 PRO envi_canny_define_buttons,buttonInfo ;定义button ENVI_DEFINE_MENU_BUTTON,buttonInfo,$ value='Canny',$;显示的值 uValue='',$;用户值 EVENT_PRO='envi_canny',$;必须与主函数名一致 pef_value='Filter',$;区分大小写 position=1;位置 END pro envi_canny,event ;定义主函数 ; compile_opt idl2 ;编译环境 ;选择数据 envi_select,fid=fid,/BAND_ONLY,pos=pos ;选择遥感数据文件 ;检查数据 print,fid,pos ;打印 if fid eq -1 then return ;判断是否得到数据 ;查询数据 envi_file_query,fid,dims=dims,ns=ns,$ nl=nl, nb=1, wl=wl ;获取数据 data=ENVI_GET_DATA(fid=fid,dims=dims,pos=pos) ;canny result=canny(data) ;显示数据 ;TVSCL,result ;新建窗体并显示数据 output=envi_pickfile(/output) ;设置并得到输出路径 if(output eq "")then begin ;判断得到的输出路径是否为空 ENVI_ENTER_DATA,result endif else begin ;保存数据 openw,lun,output,/GET_LUN ;新建二进制文件 writeu,lun,result ;将结果写入 FREE_LUN,lun ;释放 ;写头文件 ENVI_SETUP_HEAD, fname=output, $ interleave=0,data_type=1, $ NS=NS,NB=1,NL=NL,$ /write, /open, r_fid = r_fid end envi_display_bands, r_fid, 0;显示该文件(只有一个波段) END ;写完主程序之后要进行保存,$ ;在控制台中 ;save,filename="E:Program FilesExelisENVI51classicsave_addenvi_canny.sav", /routines 解决方案: 在IDL的帮助中搜素resolve_all,通过语法 RESOLVE_ALL [, CLASS=string] [, /CONTINUE_ON_ERROR] [, /QUIET] [, RESOLVE_EITHER=string] [, RESOLVE_FUNCTION=string] [, RESOLVE_PROCEDURE=string] [, SKIP_ROUTINES=string] [, UNRESOLVED=variable] 在控制台中输入resolve_all,/CONTINUE_ON_ERROR,SKIP_ROUTINES="envi"回车,在save save,filename="E:Program FilesExelisENVI51classicsave_addenvi_canny.sav", /routines