opencv与wxwidgets冲突(第三方库jpeg,tiff,png,zlib所引起)
问题:opencv与qwxwidgets都静态链接到tiff,jpeg,png,zlib四个库,当opencv使用静态编译时,在wxwidgets的event事件中处理使用opencv读写jpg,tiff,png图片有时候会出错。原因是opencv读取图片的代码可能与wxwidgets冲突了(具体原因未深入研究)。我遇到的情况是读写jpg文件来出错,读写png,tiff文件正常。
对比opencv与wxwidgets使用第三方图像库的版本如下(版本没有大改动,按理说应该不会有问题,除非有一方的代码实现对其进行了某些改动)
第三方库 opencv242 wxWidgets294
jpeg 6b (6.2) 6b
png 1.5.9 1.5.7
tiff 4.0.1 3.8.2
zlib 1.2.6 1.2.3
解决办法:双方都使用同一个第三方图像库
前提:拥有已经编译好的第三方图像库。(下载源代码,用gcc编译一下,不难)
opencv 有BUILD_***, WITH_***(其中***表第三方库名称)这两种选项。取消BUILD_***,选中WITH_***表示不使用opencv内部的第三方库,但支持读取***图像的功能。由于取消了BUILD_***,所以必须手动指定这些库的位置,不然opencv还是会使用自身带的第三方库的。指定库的位置指指定其include,lib的位置,如zlib库需定义ZLIB_LIBRARY ZLIB_INCLUDE_DIR两个变量。cmake可以命令行中指定也可以界面中指定,界面中指定效果如下:
提醒一下:本人使用这个方法它只能识别tfii,zlib. png与jpeg库cmake还是检测不到,不知道为什么。最后是直接使用opencv生成的第三方库作为系统的第三方库给wxwidgets链接的。
wxwidgets方法就简单多了,它提供了--with-***=sys的选项(但只能在./configure中配置,所以使用mingw32-make编译它提供的makefile.gcc是不行的,得使用msys环境自己配置一下makefile文件). 这是我使用的命令./configure --enable-unicode --enable-static --disable-shared --enable-monolithic --with-libpng=sys --with-zlib=sys --with-libtiff=sys --with-libjpeg=sys. 同样,这也得让gcc找得到第三方图像库的位置(这个简单,把第三方图像为的头文件和库文件放到gcc的include与lib文件夹里),不然configure不成功。
出处:https://www.cnblogs.com/wqvbjhc/
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任