C++ 无法使用 Opencv 打开 pbm 文件

C++ Can't open pbm files with Opencv

我正在尝试使用 opencv 加载 .pbm 图像。

我正在使用 imread 函数;文档说它应该打开 pbm 文件,但我不能让它工作。

它确实适用于其他格式,例如 png/jpeg/...

#define CV_LOAD_IMAGE_ANYDEPTH 2
#define CV_LOAD_IMAGE_ANYCOLOR 4
[...]
//argv[1] is the file's name
cv::Mat img = cv::imread(argv[1], CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
if (img.rows*img.cols==0){
    printf("\nImage not loaded");
    return 0;
}

..当然,对于 pbm 文件,它 returns 0.

如果您使用的是 OpenCV 3,您可以使用:

Mat img = imread("image.pbm",IMREAD_ANYCOLOR|IMREAD_ANYDEPTH);

如果您想排除起始图像是 corrupt/incorrect 的可能性,您可以使用 ImageMagick 在命令行轻松创建测试图像,大多数 Linux 发行版都安装了它,并且适用于 OSX 和 Windows。

# Create P1 (ASCII/plain) PBM and P4 (binary/rawbits) PBM
convert -size 200x100 xc:white -bordercolor black -border 50 -compress none P1.pbm
convert -size 200x100 xc:white -bordercolor black -border 50 P4.pbm