C++ 不读取整个图像的OpenCV图像尺寸
我正在使用OpenCV,正在读取千兆字节的图像——太多了,一次都无法放入内存。但是,我需要初始化一些需要图像维度的基本结构。目前,我正在使用C++ 不读取整个图像的OpenCV图像尺寸,c++,image,opencv,C++,Image,Opencv,我正在使用OpenCV,正在读取千兆字节的图像——太多了,一次都无法放入内存。但是,我需要初始化一些需要图像维度的基本结构。目前,我正在使用imread,然后立即释放图像,这是非常低效的 有没有一种方法可以使用opencv在不读取整个文件的情况下获取图像尺寸?如果没有,你能推荐另一个库(最好是轻量级的,因为这就是它的全部用途)来解析标题吗?理想情况下,它至少支持与OpenCV相同的格式。我认为直接在OpenCV中不可能做到这一点 尽管文档中没有指定,但Java(和getWidth)只解析图像头,
imread
,然后立即释放图像,这是非常低效的
有没有一种方法可以使用opencv在不读取整个文件的情况下获取图像尺寸?如果没有,你能推荐另一个库(最好是轻量级的,因为这就是它的全部用途)来解析标题吗?理想情况下,它至少支持与OpenCV相同的格式。我认为直接在OpenCV中不可能做到这一点 尽管文档中没有指定,但Java(和getWidth)只解析图像头,而不是整个图像 或者是一个外观合理的轻量级库,它肯定只检查标题,并且支持大量的图像格式
最后,如果您在Linux上,“identify”终端命令还将为您提供维度,您可以通过编程方式读取这些维度。您可以使用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;
}
#包括
int main(int argc,char*argv[])
{
//设置/获取文件路径
自动dims=boost::gil::jpeg\u读取\u维度(文件路径);
整数宽度=dims.x;
内部高度=dims.y;
}
您必须通过向链接器添加-ljpeg标志来链接libjpeg。你可以得到更多的信息