基于IDL的高分二号影像批量预处理程序(第二版)

上一版本插件预处理效果不太理想(特别是融合后分辨率不符合预期),上一版资源不再提供下载,但处理思路可以借鉴。目前在本机40GB RAM工作站上预处理一景影像大概需要13分钟。

废话少说先上资源
如果各位看官支持原创、积分充盈,可以点击下方链接使用积分下载资源
https://download.csdn.net/download/weixin_43490758/85794749

想白嫖也没关系,百度云资源也双手奉上,链接及提取码见页面底端

提示: 如果在运行过程中出现个别问题,建议先认真浏览正文,一般情况下能够解决绝大多数问题,实在解决不了的再在评论区提问,当个社畜着实不易,不能做到及时回复还请见谅!

说点真心话
目前还有很多功能需要完善,我也是IDL新手,需要参考网上相关资源,功能也在不断完善和增加,后期工作不太忙的话可能会研究批量空间配准和镶嵌匀色等功能,敬请期待。目前手头积分余额不足,所以厚着脸皮来赚点积分方便后期功能拓展。保证下面所提及的所有功能均已实现,亲测有效。

目录

    • 基于IDL的高分二号影像批量预处理程序(第二版)
  • 一、程序界面及主要功能
  • 二、处理结果展示
  • 三、程序环境要求
  • 四、功能模块代码
  • 五、使用注意事项
  • 六、百度云资源链接

一、程序界面及主要功能

目前本程序仅针对国产高分二号遥感影像的批预处理,导出数据格式为dat。按照处理流程依次为①文件解压(可选)②辐射定标(全色、多光谱)③快速大气校正(多光谱)④几何校正(全色、多光谱)⑤融合。 程序功能界面如下图所示:

输入文件夹】应包含所有需要预处理的原始高分二号影像(扩展名为*.tar.gz或*.tiff),建议不要对下载的影像做任何编辑。如果影像未解压,程序会在输入文件夹下创建同名文件夹并将文件解压至该文件夹内。
国产插件sav】ENVI APP store下载的国产卫星支持插件,全名为(envi_china_satellites_support.sav),在应用商店自行下载或在本人上传的资源中下载,选择sav文件即可。貌似该工具只支持5.3以上版本,低版本用户请谨慎使用。
保留近红外波段】可以通过单选按钮选择是否保留近红外波段(舍弃近红外波段可以在一定程度上提高处理效率,之前做过测试一景影像大概能缩减10分钟时间),默认保留近红外波段。
融合方式】目前只提供了NNDiffusePanSharpening、GramSchmidtPanSharpening两种融合方式,默认为NNDiffusePanSharpening。
输出文件夹】所有过程文件(文件名以temp结尾)及最终结果文件会存储在该文件夹中,当一景影像处理完成后程序会自动将过程文件删除。(大批量的遥感影像占用内存大,建议将该文件夹放在具有足够内存空间的磁盘)

二、处理结果展示

话不多说,直接上图看效果。
图:原始全色影像(1m分辨率)

图:原始多光谱影像(4m分辨率)

图:预处理后融合影像(1m分辨率)

三、程序环境要求

目前使用的软件是ENVI5.3(64-bit),IDL8.5,win10操作系统,win11操作系统中会出现程序界面控件显示不全。并不能保证在其他环境下能够稳定有效运行。

四、功能模块代码

①程序主入口、界面

;高分影像批量预处理
PRO PreTreatdefsysv,'!mosicmethod','NNDiffusePanSharpening'defsysv,'!RGBN',1COMPILE_OPT IDL2;为IDL编译器指定编译规则,idl2是(DEFINT32,STRICTARR)的简写,DEFINT32为IDL指定整型为32位,而不是16位。STRICTARR则强制IDL编译器以[]作为数组的定义。;;;/headless  不显示envi界面;创建用户界面;;主窗体wtop = widget_base(title='国产高分影像批量预处理(V2.0)', xsize=300, ysize=300, /column, /TLB_KILL_REQUEST_EVENTS,TLB_FRAME_ATTR=1, mbar=menubar); /column 表示列数为1,  多行每行左右顶到头      /row  多列; TLB_KILL_REQUEST_EVENTS  是否返回关闭事件; TLB_FRAME_ATTR=1创建的窗口类型,1表示窗口无法进行大小、最大化操作; mbar=menubar  传出菜单栏的ID;选择影像所在文件夹winputBase = WIDGET_BASE(wtop,  XPAD=10, YPAD=5,  /FRAME, /row);/FRAME 部件边框宽度winputLabel = WIDGET_LABEL(winputBase, VALUE='输入文件夹:')winputTextField = widget_text(winputBase, EDITABLE=0 ,UVALUE='InputTEXT')winputbutton=widget_button(winputBase, VALUE='选择',UVALUE='InputButton');选择国产高分影像支持插件sav文件wChinasupportBase = WIDGET_BASE(wtop,  XPAD=10, YPAD=5,  /FRAME, /row)wChinasupportLabel = WIDGET_LABEL(wChinasupportBase, VALUE='国产插件sav:')wChinasupportTextField = widget_text(wChinasupportBase, EDITABLE=0 ,UVALUE='ChinasupportTEXT')wChinasupportbutton=widget_button(wChinasupportBase, VALUE='选择',UVALUE='ChinasupportButton');选择处理波段数wcheckframe = WIDGET_BASE(wtop, ysize=40,/BASE_ALIGN_CENTER, XPAD=10, YPAD=5, /FRAME, /row)wcheckLabel = WIDGET_LABEL(wcheckframe, /align_center, VALUE='保留近红外波段:')wcheckBase = WIDGET_BASE(wcheckframe,/BASE_ALIGN_CENTER, XPAD=10, YPAD=5,/EXCLUSIVE,/ROW)RGB = WIDGET_BUTTON(wcheckBase,value ='是',uName = 'checkright',UVALUE='RGBN', /NO_RELEASE )RGBN = WIDGET_BUTTON(wcheckBase,value ='否',uName = 'checkerror',UVALUE='RGB',/NO_RELEASE )WIDGET_CONTROL, RGB, /SET_BUTTOn;选择融合方式wmosicbase = WIDGET_BASE(wtop, /BASE_ALIGN_CENTER, XPAD=10, YPAD=5, /FRAME, /row)wmosicLabel = WIDGET_LABEL(wmosicbase, /align_center,VALUE='选择融合方式:')wmosicDroplist = WIDGET_DROPLIST(wmosicbase, VALUE=['NNDiffusePanSharpening', 'GramSchmidtPanSharpening'], UVALUE='MOSICLIST')WIDGET_CONTROL, wmosicDroplist, SET_DROPLIST_SELECT=0;默认融合方式为NNDiffusePanSharpening;选择影像输出文件夹woutputBase = WIDGET_BASE(wtop, /BASE_ALIGN_CENTER, XPAD=10, YPAD=5, /FRAME, /row)woutputLabel = WIDGET_LABEL(woutputBase, VALUE='输出文件夹:')woutputTextField = widget_text(woutputBase, EDITABLE=0, UVALUE='OutputTEXT')woutputbutton=widget_button(woutputBase, VALUE='选择', UVALUE='OutputButton');执行命令wbuttonBase = WIDGET_BASE(wtop, /BASE_ALIGN_BOTTOM, XPAD=90, YPAD=10, /FRAME, /row)wsurebutton=widget_button(wbuttonBase, /ALIGN_CENTER, xsize=50, ysize=25,UVALUE='okButton',VALUE='确定')wcancelbutton=widget_button(wbuttonBase, /ALIGN_CENTER,xsize=50, ysize=25,UVALUE='cancelButton',VALUE='关闭')wtipBase = WIDGET_BASE(wtop, /BASE_ALIGN_BOTTOM, XPAD=10, YPAD=5, /FRAME, /row)wtipLabel = WIDGET_LABEL(wtipBase, VALUE='提示:请务必使用ENVI5.3以上版本软件!!!'); 实例化控制顶级窗体及其子控件的显示WIDGET_CONTROL, wtop, /REALIZE;创建结构体,包含各个组件ID 和参数pState={INPUTTXT:winputTextField,$ChinasupportTXT:wChinasupportTextField,$OUTPUTTXT:woutputTextField,$MOSICLIST:wmosicDroplist}WIDGET_CONTROL, wtop,set_uvalue=ptr_new(pState);绑定事件Xmanager,'PreTreat',wtop, /no_block
END

②响应事件

;事件响应
pro PreTreat_Event, Event     ; IN: event structuree = ENVI(/headless);获取top指针WIDGET_CONTROL, Event.top, GET_UVALUE=sState;  界面右上角关闭按钮可用if (TAG_NAMES(Event, /STRUCTURE_NAME) EQ $'WIDGET_KILL_REQUEST') then beginresult=DIALOG_MESSAGE("是否关闭",/QUESTION, TITLE='提示')CASE (result) OF'Yes': BEGINPTR_FREE, sState;销毁指针WIDGET_CONTROL,event.TOP,/DESTROYreturnEND'No': BEGINRETURNENDELSE: BEGINENDENDCASEendif;根据点击对象的ID值获取 其UVALUE值WIDGET_CONTROL, Event.id, GET_UVALUE=eventvalcase eventval of'InputButton' : begin inFile = DIALOG_PICKFILE(DIALOG_PARENT = e.WIDGET_ID, /DIRECTORY, TITLE='选择原始影像所在文件夹');如果点击了取消或者文件无效,跳出if ~file_test(inFile) then return;widget_control, sState.wTextField,  get_value=textValWIDGET_CONTROL,(*sState).INPUTTXT, set_Value = inFileprint,inFileend ;   'ChinasupportButton' : beginChinasupportFile = DIALOG_PICKFILE(DIALOG_PARENT = e.WIDGET_ID, TITLE='选择国产卫星支持sav插件',FILTER='*.sav');如果点击了取消或者文件无效,跳出if ~file_test(ChinasupportFile) then returnWIDGET_CONTROL,(*sState).ChinasupportTXT, set_Value = ChinasupportFileprint,ChinasupportFileend ;'RGB' : begin !RGBN=0print,!RGBNend'RGBN' : begin   !RGBN=1print,!RGBNend'MOSICLIST' : begin;获取融合方法列表中的所有值存入mosicmethodswidget_control, (*sState).MOSICLIST,  get_value=mosicmethods;获取下列表选择的索引值listValue = WIDGET_INFO(Event.id, /DROPLIST_SELECT);获取选择的融合方法名!mosicmethod=mosicmethods[listValue]print,!mosicmethodend     'OutputButton' : beginoutFile = DIALOG_PICKFILE(DIALOG_PARENT = e.WIDGET_ID, TITLE = '选择输出目录', /DIRECTORY)if ~file_test(outFile) then returnWIDGET_CONTROL,(*sState).OUTPUTTXT, set_Value = outFileprint,outFileend ;'okButton': beginWIDGET_CONTROL, (*sState).INPUTTXT, get_value=inputdirWIDGET_CONTROL, (*sState).ChinasupportTXT, get_value=ChinasupportfileWIDGET_CONTROL, (*sState).OUTPUTTXT, get_value = outputdir;如果输入输出文件均设置完成,就开始执行IF inputdir NE "" && outputdir NE "" THEN BEGIN ;检索文件夹中扩展名为tiff的文件,获取数量    num和满足要求的文件名列表filelistsfilelists=FILE_SEARCH(inputdir,'*.tiff',count = num);这里之所以检索后缀为tiff的文件而不是直接检索压缩包文件是由于,用户可能已经自行完成解压但是没有将压缩包文件删除,否则可能导致多次解压产生重复数据;如果不存在后缀为tiff的文件,先进行解压操作IF num eq 0 THEN BEGINfilelists=file_search(inputDir,'*.gz',count = num)FOR i=0, num-1 DO BEGINprint, filelists[i]tarout_folder = Untar(filelists[i])print, tarout_folderENDFORendfile = PrecessingBatch(inputdir, Chinasupportfile, !mosicmethod, !RGBN, outputdir);如果有满足条件的文件ENDIF ELSE BEGINendfile = PrecessingBatch(inputdir, Chinasupportfile, !mosicmethod, !RGBN, outputdir)ENDELSE;否则弹出警告框进行提示ENDIF ELSE BEGINresult=DIALOG_MESSAGE("输入或输出路径不能为空", TITLE='参数异常')CASE (result) OF'OK': BEGINreturnENDELSE: BEGINENDENDCASEENDELSEEND'cancelButton': beginresult=DIALOG_MESSAGE("是否关闭",/QUESTION, TITLE='提示')CASE (result) OF'Yes': BEGINPTR_FREE, sState;销毁指针WIDGET_CONTROL,event.TOP,/DESTROYreturnEND'No': BEGINreturnENDELSE: BEGINENDENDCASEENDELSE: beginPRINT, '未找到匹配项'ENDendcase
end

③单个tar.gz文件解压

;参数说明
;inputFile:单个压缩文件路径;
;tarout_folder:解压目标文件夹;Function Untar, inputFile, tarout_foldertarout_folder = FILE_DIRNAME(inputFile)+'\'+FILE_BASENAME(inputFile,'.tar.gz');解压GZ,解压后的后缀文件是.tarFILE_GUNZIP, inputFile;创建解压后gz同名文件夹,否则默认解压到当前文件夹IF ~FILE_TEST(tarout_folder) THEN FILE_MKDIR, tarout_folder;解压tarFILE_UNTAR, FILE_DIRNAME(inputFile)+'\'+FILE_BASENAME(inputfile,'.tar.gz')+'.tar',tarout_folder;删除中间解压tar文件FILE_DELETE,FILE_DIRNAME(inputFile)+'\'+FILE_BASENAME(inputfile,'.tar.gz')+'.tar';返回解压后文件夹名return,tarout_folder
end

④预处理单景遥感影像

;参数说明
;msfile:多光谱影像路径;
;pnfile:全色影像路径;
;Chinasupportfile:国产卫星支持插件sav文件
;mosicmethod:融合方法(可选值有'NNDiffusePanSharpening'和'GramSchmidtPanSharpening');
;isrgbn:是否包含近红外波段(可选值有1和0);
;outputdir:输出文件夹;
;tarout_file:结果文件路径。Function PrecessingSingle, msfile, pnfile, Chinasupportfile, mosicmethod, isrgbn, outputdir,tarout_fileCOMPILE_OPT IDL2e = ENVI(/headless)Restore, Chinasupportfile ;需要sav文件完整路径t = SYSTIME(1)tarout_name=strmid(FILE_BASENAME(msfile),31,13);1_RadiometricCalibrationms = ENVI_Open_GF2_Raster(msfile);使用APP store下载的支持国产卫星元数据读取的软件打开  rad = ENVITask('RadiometricCalibration') ;ENVI5.2.1 Introducedrad.Input_Raster = msrad.CALIBRATION_TYPE='Radiance';rad.SCALE_FACTOR=0.1rad.OUTPUT_DATA_TYPE='Float'rad.Output_Raster_URI = outputdir+'GainOffset_temp.dat'rad.EXECUTE;pn = e.Openraster(pnfile)pn = ENVI_Open_GF2_Raster(pnfile);使用APP store下载的支持国产卫星元数据读取的软件打开  radpn = ENVITask('RadiometricCalibration')radpn.Input_Raster = pnradpn.CALIBRATION_TYPE = 'Top-of-Atmosphere Reflectance'   ;'Radiance'; 默认     ;radpn.Output_Data_Type = 'UInt'radpn.SCALE_FACTOR = 10000radpn.Output_Raster_URI = outputdir+'panGainOffset_temp.dat'radpn.EXECUTEt1=SYSTIME(1)PRINT,'完成第一步【辐射定标】 ,耗时' + STRING((t1-t)/60, format='(f7.2)') + '分钟'PRINT,'*********************************************************************';2_QUACPRINT,'正在执行第二步【快速大气校正】'ms = rad.Output_Rasterqac = ENVITask('QUAC') ;ENVI5.1 Introducedqac.Input_Raster = msqac.Output_Raster_URI = outputdir+'QUAC_temp.dat'qac.EXECUTEt2=SYSTIME(1)PRINT,'完成第二步【快速大气校正】 ,耗时'$+ STRING((t2-t1)/60, format='(f7.2)') + '分钟,共耗时' + STRING((t2-t)/60, format='(f7.2)') + '分钟'PRINT,'*********************************************************************';3_RPCOrthorectificationPRINT,'正在执行第三步【正射校正】'dmfile = e.Root_Dir + 'data\GMTED2010.jp2'dm = e.Openraster(dmfile)ort = ENVITask('RPCOrthorectification') ;ENVI5.1 Introducedort.dem_raster = dmms = qac.Output_RasterIF isrgbn THEN BEGINort.input_raster = msENDIF ELSE BEGIN RGBRaster=ENVISubsetRaster(ms,Bands=[0,1,2]) ;ort.input_raster = RGBRasterENDELSEort.Output_Pixel_Size = 4ort.Output_Raster_URI = outputdir+'RPCOrthorectification_temp.dat'ort.EXECUTEpn=radpn.Output_Rasterortpn = ENVITask('RPCOrthorectification')ortpn.dem_raster = dmortpn.input_raster = pnortpn.Output_Pixel_Size = 1ortpn.Output_Raster_URI = outputdir+'panRPCOrthorectification_temp.dat'ortpn.EXECUTEt3=SYSTIME(1)PRINT,'完成第三步【正射校正】 ,耗时'$+ STRING((t3-t2)/60, format='(f7.2)') + '分钟,共耗时' + STRING((t3-t)/60, format='(f7.2)') + '分钟'dm.closePRINT,'*********************************************************************';5_GramSchmidtPanSharpeningPRINT,'正在执行第四步【融合】'print, mosicmethodms = ort.Output_Rasterpn = ortpn.Output_Rastergsf = ENVITask(mosicmethod) ;ENVI5.2 Introducedgsf.Input_Low_Resolution_Raster = msgsf.Input_High_Resolution_Raster = pntarout_file= outputdir+ tarout_name+'.dat'gsf.Output_Raster_URI = tarout_file;gsf.IGNORE_VALIDATE = 1 ;gsf.PIXEL_SIZE_RATIO = 4gsf.EXECUTEt5=systime(1)PRINT,'完成第四步【融合】 ,耗时'$+ STRING((t5-t3)/60, format='(f7.2)') + '分钟,共耗时' + STRING((t5-t)/60, format='(f7.2)') + '分钟'PRINT,'*********************************************************************'ms.close, error=errpn.close, error=errrad.OUTPUT_RASTER.Close, error=errradpn.OUTPUT_RASTER.Close, error=errqac.OUTPUT_RASTER.Close, error=err;rgs.Output_Raster.Close,error=errgsf.Output_Raster.Close, error=errort.OUTPUT_RASTER.Close, error=errortpn.OUTPUT_RASTER.Close, error=err;循环释放内存opendata=e.getopendata()length=size(opendata,/dimensions)for i=0,length[0]-1 do beginopendata[i].closeendfor;删除中间临时文件filelists=FILE_SEARCH(outputdir,'*temp*',count = num)FOR i=0, num-1 DO BEGINFILE_DELETE, string(filelists[i])ENDFORRETURN,tarout_filee.Close
END

⑤批量预处理影像

;参数说明
;inputdir:待处理影像所在文件夹;
;Chinasupportfile:国产卫星支持插件sav文件;
;mosicmethod:融合方法(可选值有'NNDiffusePanSharpening'和'GramSchmidtPanSharpening');
;isrgbn:是否包含近红外波段(可选值有1和0);
;outputdir:输出文件夹
;tarout_file:输出文件路径(只返回最后一景影像路径)Function PrecessingBatch, inputdir, Chinasupportfile, mosicmethod, isrgbn, outputdir,tarout_fileCOMPILE_OPT IDL2filelists=FILE_SEARCH(inputdir,'*.xml',count = num)PRINT,'共找到【'+STRING((num)/2, format='(i)')+'】景影像'PRINT,'********************************************'FOR i=0, num-1, 2 DO BEGINmsfile=filelists[i]pnfile=filelists[i+1]PRINT,'正在处理第【'+string((i/2+1), format='(i)')+'】景影像'end_file = PrecessingSingle(msfile, pnfile, Chinasupportfile, mosicmethod, isrgbn, outputdir)PRINT,'完成第【'+string((i/2+1), format='(i)')+'】景影像预处理'PRINT,'___________________________________________'print,string(end_file)tarout_file=end_fileENDFORRETURN,tarout_file
END

五、使用注意事项

  1. 如果需要赋值上述代码块自行创建工程文件,注意文件名与主函数名和事件名(pretreat)保持一致,命名为pretreat.pro文件;
  2. 为保证程序运行,拼装上述代码块有前后顺序要求,建议代码块的复制先后顺序为⑤④③②①;
  3. 修订后的第二版程序支持通过国产高分支持插件,能够自动读取影像的辐射定标系数等元数据,随着时间流失,该插件可能也在不断更新,届时请自行下载最新插件或仿照其他数据格式,自行添加更新插件文件中的最新年份辐射定标系数等元数据。

六、百度云资源链接

**百度云资源链接:https://pan.baidu.com/s/1dAJaRidYGqO7-uwwEeCuVA
提取码:r6sj

基于IDL的高分二号影像批量预处理程序相关推荐

  1. 基于GPU的高分一号影像正射校正的设计与实现

    基于GPU的高分一号影像正射校正的设计与实现 一 RPC正射校正的原理 影像正射校正的方法有很多,主要包含两大类:一类是严格的几何纠正模型,另一类是近似几何纠正模型.当遥感影像的成像模型和有关参数已知 ...

  2. 关于envi中加载高分二号影像出现时间错误提示的问题:“Day must contain numbers between 1 and 31”

    关于envi中加载高分二号影像出现时间错误提示的问题:"Day must contain numbers between 1 and 31",可以在envi app store下载 ...

  3. 基于python实现高分二号遥感影像水体提取与水质反演(黑臭水体与水体富营养化)

    高分二号遥感影像水体提取与水质反演 水体提取函数--NDWI 基于几何约束提取河流 生成shp,方便后续裁剪水体 水质反演 最终结果 水体提取函数--NDWI 水体提取函数water.py impor ...

  4. IDL下高分二号完整预处理代码

    下面写的太LOW了,有好多值得修改的地方,修改更新后博客地址: https://blog.csdn.net/desertsTsung/article/details/84679969 今天去不了Ear ...

  5. 高分辨率遥感卫星影像在交通方面的应用及高分二号影像获取

    高分辨率遥感影像在城市交通领域具有广泛的应用前景:如遥感交通调查.遥感影像地图与电子地图制作.道路工程地质遥感解译.交通安全与知道抗灾救灾.交通事故现场快速勘察.交通需求预测.车辆与车牌视频识别等等. ...

  6. 法国Pleiades高分卫星/遥感影像/卫星影像/高分二号影像

    引言       Pléiades高分辨率卫星星座由2颗完全相同的卫星Pléiades 1和Pléiades 2组成.Pléiades 1已于2011 年 12 月17 日成功发射并开始商业运营, P ...

  7. 高分二号多光谱GEOTIFF影像批量转换为JPG图片

    最近在做语义分割方面的研究,想对比一下高分二号4个波段的模型输入和JPG输入的结果有什么差别.使用了一些图片转换软件发现转换后的jpg图片一片漆黑,应该是geitif格式的特殊性吧!所有在网上找了一些 ...

  8. 遥感技术及高分遥感影像在地震中的应用及高分二号获取

    长期以来,地震预报监测.灾害调查.灾情信息获取主要依靠实地勘测手段,其获取的数据精度和置信度虽然较高,但存在工作量大.效率低.费用高和信息不直观等缺点.遥感技术手段可在一定程度上克服传统实地勘测手段的 ...

  9. 第059篇:高分二号遥感影像预处理流程(ENVI5.3.1平台+ENVI App Store中最新的中国国产卫星支持工具)

    今天被袁老的新闻刷屏,湖南衡水县水稻基地传出好消息:                                             袁隆平团队第三代杂交水稻测产,测得晚稻平均亩产为911.7 ...

最新文章

  1. python3 问题 No module named _sqlite3 解决方案
  2. 大数据教父Micheal Stonebraker告诉你大数据的秘密
  3. UnityShader入门精要-3.3 UnityShader的结构
  4. Java Web 开发必须掌握的三个技术:Token、Cookie、Session
  5. 同济大学计算机系陈永生,城市轨道交通应急预案演算平台的设计与研究.pdf
  6. (王道408考研操作系统)第二章进程管理-第一节1:进程、PCB及其特征
  7. 信息学奥赛一本通 2016:【例4.1】for循环求和
  8. Bootstrap3 栅格系统之列排序
  9. UpdatePanel之间的调用
  10. 手把手教你最好用的数据分析方法,会用的没几个
  11. [学习笔记] Cordova+AmazeUI+React 做个通讯录 - 使用 SQLite
  12. 深入浅出统计学(中文版)统计学其实没那么死板!
  13. 常见的Wi-Fi协议------802a/b/g/n/ac系列
  14. ENVI裁剪影像重叠区域(非矩形)
  15. 单片机单键双稳态程序 c语言,单键实现单片机开关机设计案例
  16. Redhat 8 制作本地光盘镜像yum源
  17. 除PDF转换,写论文还需PDF编辑?迅读PDF大师告诉你答案
  18. 事后诸葛亮-团队总结
  19. Launcher的启动过程
  20. 武铁机械电子工程_机械电子工程

热门文章

  1. 京东2017校园招聘Android研发工程师编程题(二):幸运数
  2. 三网运营商移动联通电信话费余额查询接口-携号转网识别查询/号码归属地查询-携号转网API接口
  3. 2020-08-28
  4. 雅虎股东紧盯阿里巴巴IPO蛋糕
  5. 拒绝无用功,封装一个通用的PopupWindow
  6. 使用QT发送http/https的post请求并接收服务器reply
  7. c语言如何初始化程序,浅谈C语言的初始化
  8. torch.nn.MaxPool1d各参数分析
  9. layui镜像站 lh_yun.gitee.io/layui
  10. java 判断文件是否pdf_如何确定文件是否为PDF文件?