点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

问题来由

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

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

Mat cv::imread(const String &        filename,int flags = IMREAD_COLOR
)

参数解释

  • filename 表示输入图像的文件路径

  • flags 表示加载图像的方式

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

加载超大图像限制与突破

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

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

modules\imgcodecs\src\loadsave.cpp

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

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会首先校验图像的大小,

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生成安装包,视频教程在这里,点击即可观看:

https://space.bilibili.com/365916694/#/

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

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

  1. python使用openCV加载图像、并将BGR格式转换成HSV格式、定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)、并使用mask信息进行颜色分离、BGR格式的图像转化为RGB、并可视化

    python使用openCV加载图像.并将BGR格式转换成HSV格式.定义HSV格式中需要分离颜色的掩码(掩模)区间(mask).并使用mask信息进行颜色分离.将BGR格式的图像转化为RGB.可视化 ...

  2. OpenCV加载图像列表imagelist的实例(附完整代码)

    OpenCV加载图像列表imagelist的实例 OpenCV加载图像列表imagelist的实例 OpenCV加载图像列表imagelist的实例 #include "opencv2/im ...

  3. python使用OpenCV加载图像为RGB图并可视化加载的图像(Convert to RGB and show image)

    python使用OpenCV加载图像为RGB图并可视化加载的图像(Convert to RGB and show image) 目录 python使用OpenCV加载图像为RGB图并可视化加载的图像( ...

  4. OpenCV 加载图像、转换图像和保存图像

    cvtColor()函数的功能是把图像从一个彩色空间换换到另外一个色彩空间,有三个参数 第一个参数表示源图像 第二参数表示色彩空间转换之后的图像 第三个参数表示源和目标色彩空间 imwrite()函数 ...

  5. 【前端】【cornerstone】【未完善】cornerstone重新加载图像大小问题——拒绝花里胡哨

    [前端][cornerstone][未完善]cornerstone重新加载图像尝试--拒绝花里胡哨 问题 正常加载图像 尝试方法 方法1[无效]:直接修改columnPixelSpacing.rowP ...

  6. 使用Python,OpenCV加载图像并将其显示在屏幕上?

    这篇博客展示了如何使用OpenCV从磁盘上读取图像,在屏幕上显示它,然后等待按键关闭窗口并终止脚本. cv2.imread() cv2.imwrite() cv2.imshow() cv2.imrea ...

  7. python opencv imread()函数 (从文件加载图像)

    def imread(filename, flags=None): # real signature unknown; restored from __doc__"""i ...

  8. 用jQuery预加载图像

    我正在寻找一种快速简单的方法来用JavaScript预加载图像. 如果重要的话,我正在使用jQuery. 我在这里( http://nettuts.com ... )看到了: function com ...

  9. c++读取图片_Pytorch读取,加载图像数据(一)

    Pytorch读取,加载图像数据(一) 在学习Pytorch的时候,先学会如何正确创建或者加载数据,至关重要. 有了数据,很多函数,操作的效果就变得很直观. 本文主要用其他库读取图像文件(学会这个,你 ...

最新文章

  1. 「DB」数据库事务的隔离级别
  2. java继承类型转换_#java 一个简单的例子理解java继承、成员函数重写、类型转换...
  3. WireShare抓包在ssl协议里面提示(Level: Fatal, Description: Protocol Version)
  4. ansys matlab 调用,matlab 调用ansys (转载)
  5. MathType 换行后无法对齐,怎么都对不齐!!!强迫症晚期(见图)
  6. CVTE的c语言面试题,2018 CVTE 前端校招笔试题整理
  7. c# 开发ActiveX控件
  8. 360 2019校招笔试题第一题 表面积
  9. 统计学简介之九——两个总体参数的区间估计
  10. 三年上一大台阶,联想凌拓做对了什么?
  11. Microsoft Excel 教程:如何在 Excel 中使用 COUNTIF 函数?
  12. 植物大战僵尸音乐计算机简谱,植物大战僵尸(主题音乐)钢琴谱
  13. 2022华为杯A题思路分析移动场景超分辨定位问题
  14. MyEclipse设置黑色主题皮肤(详细)
  15. 非wait线程即时唤醒epoll_wait
  16. MATLAB中Simulink的模块封装
  17. 设计计算机的端口电路,火控计算机接口电路的设计
  18. Centos7 Cannot find a valid baseurl for repo: base/7/x86_64
  19. Deliveries(国际快递包裹跟踪软件)
  20. 非常不错的一片关于光耦的文章

热门文章

  1. 滴滴自动驾驶部门成立独立公司,CTO张博兼任新公司CEO
  2. 为什么AI的翻译水平还远不能和人类相比?
  3. 量子技术发展的一小步:Google AI推出开源框架Cirq
  4. AI实验室•西安站 教你用人脸识别打造爆款应用
  5. 清北浙交大比拼,南大强势上榜,AI到底哪家强?
  6. 经验 | Pytorch还是Tensorflow?英伟达工程师帮你总结了
  7. 再见,FastJson...
  8. 老弟,你连HTTPS 原理都不懂,还给我讲“中间人攻击”,逗我吗...
  9. 可能是东半球最好的 Curl 学习指南,强烈建议收藏!
  10. 【廖雪峰python入门笔记】break和continue