不读取整个图像,获取OpenCV图像尺寸

7
我正在使用OpenCV读取几GB的图像,但是一次性将其全部装入内存中。然而,我需要初始化一些基本结构,这些结构需要图像的尺寸。目前,我正在使用imread,然后立即释放图像,这非常低效。
使用OpenCV是否有一种方法可以在不读取整个文件的情况下获取图像尺寸?如果没有,您能否建议另一个库(最好是轻量级的,因为它只用于解析标头),该库支持至少与OpenCV相同数量的格式?
2个回答

2
我认为在OpenCV中直接做到这一点是不可能的。
虽然文档中没有指定,但Java的ImageReader.getHight(和getWidth)仅解析图像标头,而不是整个图像。
另外,这里有一个看起来合理的轻量级库,它确实只检查标头,并支持大量图像格式。
最后,如果您在Linux上,“identify”终端命令也会给出图像尺寸,然后您可以以编程方式读取它们。

1
你可以使用Boost GIL:
#include <boost/gil/extension/io/jpeg_io.hpp>

int main(int argc, char *argv[])
{
    //set/get file_path
    auto dims = boost::gil::jpeg_read_dimensions(file_path);
    int width = dims.x;
    int height = dims.y;
}

你需要在链接器中添加-ljpeg标志,以链接libjpeg。你可以在这里获取更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接