OpenCV图像尺寸无需读取整个图像

时间:2013-11-27 05:51:36

标签: c++ image opencv

我正在使用OpenCV并且正在读取千兆字节的图像 - 太多而无法一次装入内存。但是,我需要初始化一些需要图像尺寸的基本结构。目前我正在使用imread,然后立即释放图像,这实在是效率低下。

使用opencv有没有办法在不读取整个文件的情况下获取图像尺寸?如果没有,你能否建议另一个可以解析标题的库(最好是轻量级的,可以看作是它的全部内容)?理想情况下,它至少支持与OpenCV一样多的格式。

2 个答案:

答案 0 :(得分:2)

我认为这不可能直接在opencv中使用。

尽管未在文档中指定,但Java的ImageReader.getHight(和getWidth)仅解析图像标题,而不是整个图像。

或者here是一个看起来很合理的轻量级库,它绝对只检查标题,并支持大量的图像格式。

最后,如果你在Linux上,'identify'终端命令也会给你尺寸,然后你可以用编程方式阅读。

答案 1 :(得分:0)

你可以使用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。您可以获得更多信息here