【问题标题】:C++: libpng conflict on opencvC ++:opencv上的libpng冲突
【发布时间】:2018-01-02 04:00:35
【问题描述】:

我正在尝试使用 opencv2 读取 png 文件,我收到以下错误。

libpng warning: Application built with libpng-1.2.53 but running with 1.6.27
OpenCV Error: Assertion failed (dsize.area() > 0 || (inv_scale_x > 0 && inv_scale_y > 0)) in resize, file /home/dpk/Desktop/opencv/opencv/modules/imgproc/src/imgwarp.cpp, line 3484

我的系统上有libpng 1.6.27。 Opencv 是使用命令cmake -D BUILD_PNG=OFF /home/dpk/Desktop/opencv 构建的,以避免来自 opencv 的库与我系统中的库发生冲突。

我编译需要读取png的程序如下

g++ preProcess.cpp -I/usr/local/include/libpng16 `pkg-config opencv --cflags --libs` -o preProcess

ldd 在二进制文件中的输出为 libpng 提供以下内容

libpng16.so.16 => /usr/local/lib/libpng16.so.16 

我该如何解决这个错误?

【问题讨论】:

  • 当我查看 repo 中的 3rdparty 目录时,即使在 2010 年也有比 1.2.53 更新的 LibPNG 版本,所以看起来这不是它的来源。您是否碰巧在您的系统上安装了其他一些 OpenCV 副本,它会意外使用? pkg-config opencv --cflags --libs 的输出有意义吗?

标签: c++ opencv g++ libpng


【解决方案1】:

从 OpenCV 的 CMakeLists.txt 来看,您必须设置 WITH_PNG=OFF,而不是 BUILD_PNG

【讨论】:

  • 这不会完全禁用 OpenCV 中的 PNG 支持吗?考虑到用户想要“使用 opencv2 读取 png 文件”,这似乎不太理想......
  • 我觉得这正是提问者想要的。当然,如果不链接到库,你就不能支持 PNG,但我认为 asker 直接在他的应用程序中使用 libpng,而不是通过 OpenCV。
猜你喜欢
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 2012-09-10
  • 2012-01-24
  • 2019-12-25
  • 2023-03-24
相关资源
最近更新 更多