前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解密 | OpenCV加载图像大小是有限制的 ?

解密 | OpenCV加载图像大小是有限制的 ?

原创
作者头像
用户7118204
修改2020-04-07 11:49:21
1.2K0
修改2020-04-07 11:49:21
举报
文章被收录于专栏:Android逆向分析从入门到深入

问题来由

最近有人问一个问题,就是它有个大小800MB的图像文件,发现无法通过OpenCV的imread函数加载,只要一读取,程序就直接崩溃了。我问了图像的大小,计算像素数量之后发现总像素数目已经超过了OpenCV声明最大像素数目限制,所以肯定无法读取了!

大家都知道OpenCV中读取图像的函数是imread,函数功能如下:

代码语言:javascript
复制
Mat cv::imread(         const String &        filename,         int flags = IMREAD_COLOR)

参数解释

  • filename 表示输入图像的文件路径
  • flags 表示加载图像的方式

支持包括bmp、jpg、png、webp、pfm、sr、ras、tiff、hdr等格式图像文件

之前写过一篇imread的各种读图像技巧跟方式,链接如下:

加载超大图像限制与突破

加载超大图像遇到的最常见的一个错误就是

提示电脑内存不够了,但是很多时候电脑内存是足够,但是还是无法加载,原因很简单,主要是OpenCV本身对加载的图像大小是由限制的,这个限制定义在

modules\imgcodecs\src\loadsave.cpp

这个源码文件中,有三个关于图像imread时候最大图像宽、高、像素数目大小限制,定义的代码为:

代码语言:javascript
复制
static const size_t CV_IO_MAX_IMAGE_WIDTH = utils::getConfigurationParameterSizeT("OPENCV_IO_MAX_IMAGE_WIDTH", 1 << 20);
static const size_t CV_IO_MAX_IMAGE_HEIGHT = utils::getConfigurationParameterSizeT("OPENCV_IO_MAX_IMAGE_HEIGHT", 1 << 20);
static const size_t CV_IO_MAX_IMAGE_PIXELS = utils::getConfigurationParameterSizeT("OPENCV_IO_MAX_IMAGE_PIXELS", 1 << 30);

解释如下:

  • 支持的最大图像宽度 2^20
  • 支持的最大图像高度2^20
  • 支持的最大像素数目2^30

函数validateInputImageSize会首先校验图像的大小,

代码语言:javascript
复制
static Size validateInputImageSize(const Size& size)
{
    CV_Assert(size.width > 0);
    CV_Assert(static_cast<size_t>(size.width) <= CV_IO_MAX_IMAGE_WIDTH);
    CV_Assert(size.height > 0);
    CV_Assert(static_cast<size_t>(size.height) <= CV_IO_MAX_IMAGE_HEIGHT);
    uint64 pixels = (uint64)size.width * (uint64)size.height;
    CV_Assert(pixels <= CV_IO_MAX_IMAGE_PIXELS);
    return size;
}

修改限制

想要加载超过这些限制的图像文件,首先要确保你由足够的内存,然后手动修改OpenCV源码文件,把限制改到你想要的值,然后重新编译OpenCV即可。关于如何从源码编译OpenCV生成安装包,视频教程在这里,点击即可观看:

代码语言:javascript
复制
https://space.bilibili.com/365916694/#/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档