zoukankan      html  css  js  c++  java
  • 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可以命令行中指定也可以界面中指定,界面中指定效果如下:

    people3.jpg
    people3.jpg (128.13 KiB) 被浏览 7 次



    提醒一下:本人使用这个方法它只能识别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不成功。

    作者:wqvbjhc
    出处:https://www.cnblogs.com/wqvbjhc/
    版权:本文版权归作者和博客园共有
    转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
  • 相关阅读:
    积性函数大全(欧拉函数、莫比乌斯反演、杜教筛……)
    Codeforces 1427 G.One Billion Shades of Grey
    Codeforces Global Round 11 A-F题解
    一般难度模板复习
    (补充)证明线性递推相关的Hamilton-Cayley定理
    [ZJOI2018]树
    [ICPC-Beijing 2006]狼抓兔子
    P4869 albus就是要第一个出场
    浅谈算法——线性基
    [COCI2017-2018#1] Deda
  • 原文地址:https://www.cnblogs.com/wqvbjhc/p/2694032.html
Copyright © 2011-2022 走看看