• 编译带ECW的GDAL


    该文是在我另一篇博客“gdal、geos的 windows编译 openCL加速”基础上进行进一步扩展的,那篇博客记录的是gdal2.2.0的整个编译过程,由于那篇博客的文末记录了一个gdal2.2.0测试OpenCL加速纠正的已知内存泄漏Bug,所以该博客直接使用gdal-2.4.4的基础上进行编译。
    根据李民录大哥的GDAL指南提示如下
    在这里插入图片描述
    仔细研究了三种方法,ECW库、Kakadu、OpenJPEG
    Kakadu库win10编译有异常,而且其源码比较难找,所以没有测试。参考:kakadu——JPEG2000图像压缩软件的安装和使用

    现在测试一下正常编译的gdal(按照另一篇博客方法进行编译,没有ECW库)是否支持*.jp2影像格式,在gdal的bin目录下找到gdalinfo.exe,然后使用下面命令参数进行测试

    D:\VariousLib\GDAL\Src\GDAL244Build\bin\gdalinfo.exe -checksum -nomd -norat C:\temp\ShuiFa\datas\GF-6_MS_MYC_202210190316_202210190323_sci_13.jp2
    
    • 1

    测试结果:
    在这里插入图片描述
    提示错误,gdal不支持的影像格式

    好了,现在下面来解决这个问题。上面说过该博客直接使用gdal-2.4.4的基础上进行编译,所以相应下载资源文件如下
    编译需要的文件:
    1、gdal-2.4.4源码及geos-3.5.2源码下载

    六、设置ECW库(接上篇文章目录结构)

    为啥GDAL需要增加ECW?

    ECW库主要是可以解析JPG2000格式的影像,由于工作需要,我们的程序需要支持*.jp2格式,该格式影像在默认编译gdal的时候是不支持的,需要自己下载ECW库,一起编译即可。

    ECW库文件下载:
    ECW动态库(编译好的dll,可附加GDAL编译)

    如果不想自己动手,要本博客编译出来现成的东西,可以直接下载
    GDAL库2.4.4版本(内置其他库包括支持OpenCL纠正+geos352+ECW)

    这次我的gdal输出目录设置的是“D:\VariousLib\GDAL\Src\GDAL244Build”文件夹,后期更新汇总的时候需要用到
    在这里插入图片描述

    ECW库文件介绍

    由于设置ECW库前,需要把源码先编译成动态库,所以直接在网上找到了动态库,然后直接进行GDAL的ECW库编译,ECW编译好的库[下载地址]。(https://download.csdn.net/download/weixin_42727069/86947197)

    计划编译64位系统,所以重点关注64位系统的需要文件在不在。
    根目录结构如下:
    在这里插入图片描述
    Dll文件夹下64位文件夹
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    步骤1、修改nmake.opt文件

    nmake.opt文件在gdal-2.4.4文件夹,打开后查找“ECWDIR”,该字符串大概位置会出现三次,一个是4.1版本的,一个是5.0版本的,一个是3.3版本的,最后选择了5.0版本的代码进行更改。
    在这里插入图片描述

    最后选择了5.0版本的进行更改,知道为啥吗?
    在确定用啥代码进行更改的时候我仔细看了一下我下载的库文件(这就是为啥我要把ECW库里面的文件截图展示出来),在lib/x64文件夹下是有NCSEcw.lib文件,正好与5.0版本吻合,所以就选用5.0版本的

    取消注释更改的时候注意路径和路径下面对应的文件都要仔细检查一下,否则会出现各种异常

    # Uncomment the following and update to enable ECW read support with the 5.0 SDK
    ECWDIR  =  "D:\VariousLib\GDAL\Src\ecw"
    ECWFLAGS = -DECWSDK_VERSION=50 \
           -I$(ECWDIR)\include \
           -I$(ECWDIR)\include/NCSECW/api -I$(ECWDIR)\include/NCSECW/jp2 \
           -I$(ECWDIR)\include/NCSECW/ecw
    ECWLIB  =  $(ECWDIR)\lib\x64\NCSEcw.lib
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    更改后的截图
    在这里插入图片描述

    步骤2、编译gdal

    参考上一篇博客的gdal方法,细节就不记录了。
    1、启动VS2015的 x64 本机工具命令,在该命令窗口上进行编译;
    2、把目录切换到gdal安装包根目录;
    3、按顺序执行下面命令

    nmake -f makefile.vc MSVC_VER=1900 WIN64=1//编译
    
    nmake -f makefile.vc MSVC_VER=1900 WIN64=1 install;// 生成bin、data、html文件夹
    
    nmake -f makefile.vc MSVC_VER=1900 WIN64=1 devinstall; //devinstall生成lib和include(其实)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    一般执行第一条编译语句容易出错,如果没有错误,下面两条代码很快可以执行完。
    最后一条语句执行成功后界面如下
    在这里插入图片描述

    步骤3、测试是否支持*.jp2影像格式

    再次执行检查命令

    D:\VariousLib\GDAL\Src\GDAL244Build\bin\gdalinfo.exe -checksum -nomd -norat C:\temp\ShuiFa\datas\GF-6_MS_MYC_202210190316_202210190323_sci_13.jp2
    
    • 1

    会提示缺少NCSEcw.dll弹框,这时候只用把ecw文件夹下的dll/x64文件夹下的NCSEcw.dll、NCSEcwd.dll拷贝到gdalinfo.exe同级目录即可,运行结果如下图
    在这里插入图片描述
    现在这个版本的gdal已经支持jp2影像。

    步骤4、汇总更新gdal库文件

    1、ecw/dll/x64下面所有*.dll和*.exe复制到“D:\VariousLib\GDAL\Src\GDAL244Build\bin”目录
    2、ecw/include下面所有文件复制到“D:\VariousLib\GDAL\Src\GDAL244Build\include”目录
    3、ecw/lib/x64下面所有lib复制到“D:\VariousLib\GDAL\Src\GDAL244Build\lib”目录
    如果编译了geos则也要把geos相关文件复制汇总,明细:
    1、geos-3.5.2\src文件夹下所有的*.dll复制到“D:\VariousLib\GDAL\Src\GDAL244Build\bin”目录
    2、geos-3.5.2\include文件夹下所有文件复制到“D:\VariousLib\GDAL\Src\GDAL244Build\include”目录
    3、geos-3.5.2\src文件夹下所有的*.lib复制到“D:\VariousLib\GDAL\Src\GDAL244Build\lib”目录

    截图如下
    bin目录
    在这里插入图片描述

    include目录
    在这里插入图片描述

    lib目录
    在这里插入图片描述
    All done!特此记录!
    辉 2022.11.10 初版编辑

    使用影像进行纠正测试

    在这里插入图片描述
    Jp2影像,纠正输出1.46G影像,耗时:139秒
    Tiff影像,纠正输出1.48G影像,耗时:16秒
    内存泄漏严重:
    在这里插入图片描述
    辉 2022.11.11 再版

    七、设置OpenJPEG库

    由于测试使用ECW库编译的GDAL在读取jp2影像速度较慢,而且还存在严重内存泄漏问题,故又尝试使用该库。
    参考链接:
    OpenJPEG 2.4.0的图示使用
    OpenJPEG的详细使用

    步骤1、下载OpenJPEG库

    OpenJPEG各种版本的下载
    打开链接,点击下载下面红框安装包。
    在这里插入图片描述

    或者csdn上面下载我编译好现成的库:
    编译好的gdal244库(带openjpeg)和单独openjpeg-v2.4.0-windows-x64库

    步骤2、修改nmake.opt文件

    nmake.opt文件在gdal-2.4.4文件夹,打开后查找“OpenJpeg”,找到如下位置。
    在这里插入图片描述
    根据下载的Openjpeg库进行更改include目录绝对路径和lib文件绝对路径,更改后如下
    在这里插入图片描述

    步骤3、编译gdal

    由于明知ECW库不好用,这里就可以把ECW库相关的使用#给注释掉,如果以前编译过ECW库这么做后期编译会报错,最好把源码解压后复制gdal-2.4.4文件夹nmake.opt文件和alg文件夹下的makefile.vc文件,进行替换,从头编译即可

    参考上一篇博客的gdal方法,细节就不记录了。
    1、启动VS2015的 x64 本机工具命令,在该命令窗口上进行编译;
    2、把目录切换到gdal安装包根目录;
    3、按顺序执行下面命令

    nmake -f makefile.vc MSVC_VER=1900 WIN64=1//编译
    
    nmake -f makefile.vc MSVC_VER=1900 WIN64=1 install;// 生成bin、data、html文件夹
    
    nmake -f makefile.vc MSVC_VER=1900 WIN64=1 devinstall; //devinstall生成lib和include(其实)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    最后一条语句执行成功的界面如下
    在这里插入图片描述

    步骤4,测试

    使用OpenJPEG来解析Jp2影像,纠正输出1.46G影像,耗时:40秒,通过观察内存占用情况,没有过多的内存泄漏。该库效果比ECW库效率更高
    在这里插入图片描述
    如果以前GDAL有的话只用更新gdal204.dll动态库到源程序目录即可,不必重新编译所有代码。
    辉 2022.11.11 再版

  • 相关阅读:
    gitlab runner
    redis:常用的数据类型
    LeNet网络复现
    Kafka - 主题Topic与消费者消息Offset日志记录机制
    Zabbix搭建使用一篇通
    两台实体机器4个虚拟机节点的Hadoop集群搭建(Ubuntu版)
    如何测量监控带宽使用情况
    C++大数加法——最简单实现
    Cartographer构建多分辨率栅格地图的原理
    java工程师进阶之路—java学习路线
  • 原文地址:https://blog.csdn.net/weixin_42727069/article/details/127783361