美文网首页
Debian 中默认版本OpenCV读取PNG文件丢失ALPHA

Debian 中默认版本OpenCV读取PNG文件丢失ALPHA

作者: DeanWang | 来源:发表于2017-04-29 19:09 被阅读176次

    将本机的图像处理程序移植到Debian上,apt-get install libopencv-dev 安装默认的OpenCV开发包;然后编译程序后,发现有一个问题;图片总是丢失透明通道。下载GDB调试,发现读取特定的PNG文件时读取进来的Mat总是 CV_8UC3 类型; 但是PNG文件是有alpha通道的;

    PNG文件头
    丢失透明通道的PNG图片头信息如上; IHDR头里面的信息关键信息是08030000,比对下正确读取到alpha通道的的PNG文件,此处是08060000;
    以下是libpng/png.h头文件里面COLOR_TYPE类型的定义:
    #define PNG_COLOR_TYPE_GRAY 0
    #define PNG_COLOR_TYPE_PALETTE  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)
    #define PNG_COLOR_TYPE_RGB        (PNG_COLOR_MASK_COLOR)
    #define PNG_COLOR_TYPE_RGB_ALPHA  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)
    #define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)
    

    该处 08 代表一个图像的depth;03是PNG_COLOR_TYPE_PALETTE类型;所以这应该是一个特定类型PNG文件读取错误;
    推测可能的原因有两个,一个是相关的PNG开发包的版本问题,另一个是Debian系统默认的OpenCV的版本问题;先升级下OpenCV的版本试试;
    首先,卸载系统安装的OpenCV开发包;

    apt-get remove libopencv-calib3d-dev libopencv-calib3d2.3 libopencv-contrib-dev libopencv-contrib2.3 libopencv-core-dev libopencv-core2.3 libopencv-features2d-dev libopencv-features2d2.3 libopencv-flann-dev libopencv-flann2.3 libopencv-gpu-dev libopencv-gpu2.3 libopencv-highgui-dev libopencv-highgui2.3 libopencv-imgproc-dev libopencv-imgproc2.3 libopencv-legacy-dev libopencv-legacy2.3 libopencv-ml-dev libopencv-ml2.3 libopencv-objdetect-dev libopencv-objdetect2.3 libopencv-video-dev libopencv-video2.3 libopencv-dev
    

    OpenCV官网下载一个2.4.13.2版本的Release
    根据官方指引;开始编译;中间ffmpeg报错;因为不涉及到视频相关的处理;直接编辑 build/cvconfig.h 将

    #define HAVE_FFMPEG
    

    注释掉;重新编译静态库

    cmake -D BUILD_SHARED_LIBS=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/ ..
    

    编译成功,然后make install 安装;然后重新编译项目;重新测试;发现问题解决了。

    相关文章

      网友评论

          本文标题:Debian 中默认版本OpenCV读取PNG文件丢失ALPHA

          本文链接:https://www.haomeiwen.com/subject/zonzzttx.html