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

OpenCV image dimensions without reading entire image

本文关键字:图像 读取 OpenCV      更新时间:2023-10-16

我正在使用OpenCV,正在读取千兆字节的图像——太多了,一次无法放入内存。然而,我需要初始化一些需要图像尺寸的基本结构。目前我正在使用imread,然后立即释放图像,这真的很低效。

有没有一种方法可以在不读取整个文件的情况下使用opencv获得图像尺寸?如果没有,你能建议另一个可以解析头的库(最好是轻量级的,因为这就是它的全部用途)吗?理想情况下,它将支持至少与OpenCV一样多的格式。

我认为这在opencv中是不可能的。

虽然文档中没有指定,但Java的ImageReader.getHight(和getWidth)只解析图像头部,而不是整个图像。

或者,这里有一个看起来合理的轻量级库,它肯定只检查标题,并支持大量的图像格式。

最后,如果您在Linux上,"identify"terminal命令还会为您提供维度,然后您可以通过编程读取这些维度。

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