解决 OpenCV Error: Insufficient memory (Failed to allocate 3221225472 bytes) in cv::OutOfMemoryError

2023-05-16

现象:调用cvLoadImage加载图片时报OpenCV Error: Insufficient memory (Failed to allocate 3221225472 bytes) in cv::OutOfMemoryError

通过错误描述可以大致猜想,是在申请内存时崩溃,且这个值的大小超过了int的最大值,带着猜想我们跟一下opencv的源码。

调用栈如下:

cvLoadImage->cv::imread_->cvCreateImage->cvCreateImageHeader->cvInitImageHeader->cvCreateData

cvInitImageHeader中计算图片像素大小,关键代码段:array.cpp::cvInitImageHeader

image->widthStep = (((image->width * image->nChannels *
         (image->depth & ~IPL_DEPTH_SIGN) + 7)/8)+ align - 1) & (~(align - 1));
image->origin = origin;
image->imageSize = image->widthStep * image->height;

此时,由于图片像素太大,opencv计算出的 image->imageSize 的值为3221225472,而image->imageSize的类型为int,该值已经超过了正整数的最大值,导致发生了截断,在内存中表示的值为-1073741824。而在cvCreateData中,会用这个大小去申请内存,程序自然就崩掉了。

 

总结:图片像素过大,opencv算出来的值超过了int的最大值,发生了截断,算法就是以上几行代码。然后用这个大小申请内存时崩溃。可见opencv对输入的图片像素是有限制的,在调用cvLoadImage之前,可以手动计算一下该值大小,如果超过了最大正整数的值,即2147483648,就会发生截断,造成程序崩溃。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解决 OpenCV Error: Insufficient memory (Failed to allocate 3221225472 bytes) in cv::OutOfMemoryError 的相关文章

  • Python int和float在64位系统中的内存消耗

    我正在 Python 3 4 的 64 位系统中尝试以下代码 以了解不同原始数据类型的内存消耗 import sys print sys getsizeof 45 prints 28 print sys getsizeof 45 2 pri
  • 如何序列化 android.graphics.Path 对象

    我正在尝试将 Android graphics Path 对象存储在内部设备内存中 有谁知道如何序列化 android graphics Path 对象 另外 还有其他方法来存储 Path 对象吗 谢谢 我这样做的方法是从原始 Path 类
  • 如何将 opencv mat 图像转换为 gdi 位图

    我想将 openCV Mat 文件转换为 GDI 位图图像 我找不到任何有关如何执行此操作的信息 我认为没有直接的方法可以做到这一点 但我希望它不涉及将其写入文件并读回 http opencv users 1802565 n2 nabble
  • 如何使用Java OpenCV

    我正在使用图像处理开始我的最后一年项目 并希望完成类似的事情this http www youtube com watch v EPai5f2sWaA 它是人体和物体检测的结合 我真的很想用 Java 来做 因为我在 C 方面的经验很少 I
  • 如何将图像从 np.uint16 转换为 np.uint8?

    我正在创建一个图像 image np empty shape height width 1 dtype np uint16 之后我将图像转换为 BGR 模型 image cv2 cvtColor image cv2 COLOR GRAY2B
  • 从 2 个摄像头捕获(OpenCV、Python)[重复]

    这个问题在这里已经有答案了 所以我试图从 openCV 中的两个摄像头 python 和 windows 7 进行捕获 我用一台相机拍摄的效果很好 你也会注意到我正在对图像做一些时髦的事情 但这并不重要 这是尝试使用两个的代码 import
  • ValueError:当数组不是序列时设置带有序列的数组元素

    您好 此代码旨在存储使用 open cv 绘制的矩形的坐标 并将结果编译为单个图像 import numpy as np import cv2 im cv2 imread 1 jpg im3 im copy gray cv2 cvtColo
  • OpenCV:如何使用图像计算相机和物体之间的距离?

    我是 OpenCV 的新手 我正在使用以下公式来计算距离 distance to object mm focal length mm real height of the object mm image height pixels obje
  • 我的 Bitset 的大小是多少?

    我想存储System currentTimeInMillis以尽可能小的空间存储在内存中 因为我必须将数百万个它们存储在内存中 我把它转换为binaryString这给了我41 bits 这是我的程序 public class BitSet
  • 如何在 opencv 3.0 Beta 中从文件读取 UMat?

    我想用UMat所以我的代码可以使用 OpenCL OpenCV 3 0 0 Beta 在 GPU 和 CPU 上运行 但我找不到将图像文件读入的方法UMat或转换一个Mat to UMat 如何将图像读入UMat 样品用于Mat to UM
  • OpenCV 机器学习算法的 CSV 格式

    OpenCV 中的机器学习算法似乎使用以 CSV 格式读取的数据 参见示例这个 cpp文件 https code ros org trac opencv browser trunk opencv samples c tree engine
  • 不同翻译单元中字符串文字的内存地址是否相同?

    假设我们有以下 cpp 文件 include
  • 在“delete this;”语句期间发生了什么?

    请考虑以下代码 class foo public foo foo void done delete this private int x 以下两个选项中发生了什么 并且有效吗 选项1 void main foo a new foo a gt
  • 如何在 OpenCV 中将 Float Mat 写入文件

    我有一个矩阵 Mat B 480 640 CV 32FC1 包含浮点值 我想将此矩阵写入一个可以打开的文件Notepad https en wikipedia org wiki Windows Notepad or 微软Word https
  • VideoCapture 未检测到 uEye 摄像头

    我的 uEye 相机遇到了一个问题 使用我的笔记本电脑摄像头 id 0 或 USB 上的网络摄像头 id 1 此行完美运行 TheVideoCapturer open 1 TheVideoCapturer 属于 VideoCapture 类
  • OpenCV 读取视频文件时内存不足

    此示例从文件中读取视频cv2 VideoCapture在 python OpenCV 中内存不足 import cv2 cap cv2 VideoCapture file mp4 while True ret frame cap read
  • 使用 pygtk3 将 GUI 窗口添加到 python opencv2 程序

    我已经使用Python和Opencv2完成了一个程序 现在 我想向我的程序添加一个 GUI 窗口 我对 PyGtk3 有一些经验 因此 我修改了代码以采用 PyGtk3 但是 我遇到了错误 因此 我尝试了一个简单的程序来找出实际的错误 我的
  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 如何将 Opencv VideoWriter 与 GStreamer 结合使用?

    我正在尝试使用 Opencv VideoWriter 传输 h264 流 以使用 VideoCapture 将其传输到网络上的另一台电脑上 但是 我被困在 VideoWriter 上 执行此代码会返回错误 并且 out isOpened 始

随机推荐

  • Golang 获取今天和昨天零点的时间

    获取今天和昨天零点的时间 func GetTodayAndYesterdayZroe now 61 time Now today 61 time Date now Year now Month now Day 0 0 0 0 time Lo
  • Golang float64转decimal再加减乘除运算,解决float64数据精度问题

    package main import 34 fmt 34 34 github com shopspring decimal 34 func main x 61 decimal NewFromString 34 1 34 y 61 deci
  • Golang float64保留三位小数

    func prettyFloat64 f float64 n int float64 base 61 10 for i 61 1 i lt n i 43 43 base 61 base 10 inst 61 int64 f float64
  • Golang 计算两个时间相差多少分钟

    stime int64 etime int64 时间戳 starttime 61 time Unix stime 0 endtime 61 time Unix etime 0 costtime 61 decimal NewFromFloat
  • Spring自动配置原理

    文章目录 一 概念二 自动配置原理二 自动配置生效总结 一 概念 spring集成其他框架中 xff0c 需要编写大量的xml配置文件 xff0c 编写这些配置文件十分繁琐 xff0c 常常出行错误 xff0c 导致开发效率低 Spring
  • centos 上容器配置X11

    系统 xff1a centos 7 9 连接工具 xff1a 同一个局域网内win10电脑上安装的MobaXterm Personal 步骤 xff1a 找到对应的包 96 yum whatprovides xhost 安装yum y in
  • Java 实现线程安全的方式

    1 创建线程的三种方式 通过实现 Runnable 接口 xff1b 通过继承 Thread 类本身 xff1b 通过 Callable 和 Future 创建线程 2 线程的生命周期 新建状态 使用 new 关键字和 Thread 类或其
  • 生产者消费者问题c语言_C中的生产者消费者问题

    生产者消费者问题c语言 Here you will learn about producer consumer problem in C 在这里 xff0c 您将了解C语言中的生产者消费者问题 Producer consumer probl
  • 2.15多生产者多消费者问题

    视频链接 xff1a https www bilibili com video BV1YE411D7nH p 61 24 一 xff0c 问题描述 桌上有一只盘子 xff0c 每次只能向其中放入一个水果 爸爸向盘子中只放苹果 xff0c 妈
  • 【已解决】xterm: Xt error: Can‘t open display:

    项目场景 xff1a 在MobaXterm中 xff0c 使用Ubuntu 18 04的gdb来debug MPI并行的C 43 43 代码 问题描述 Debug时 xff0c 输入 mpiexec span class token ope
  • mariadb安装

    1 配置官方的mariadb的yum源 手动创建 mariadb repo仓库文件 touch etc yum repos d mariadb repo 然后写入如下内容 mariadb name 61 MariaDB baseurl 61
  • Java 给某段代码加超时时间

    问题原因 xff1a 使用HuTool 的DbTtil 不能设置数据库连接超时时间 xff0c 可能数据库挂了 xff0c 会导致连接一直卡在那 xff0c 也没有异常抛出 xff0c 导致线程一直占着 所以给该段代码加超时时间处理 spa
  • 使用reserve来避免不必要的内存重新分配

    STL容器的内存分配策略是 xff0c 他们会自动增长以便容纳下你放入其中的数据 xff0c 只要没有超过它的最大限制就可以 xff08 要查看最大限制可调用名为max size的成员函数 xff09 对于vector和string xff
  • zmq发布-订阅模式c++实现

    上一篇讲到zmq的安装及简单的请求 应答模式 xff0c 本篇主要来看一下zmq的pub sub代码如何实现 发布 订阅模式的特点 xff1a 1 一个发布者可以被多个订阅者订阅 xff0c 即发布者和订阅者是1 xff1a n的关系 2
  • git commit之后如何撤销

    git正常提交代码的的操作为 xff1a git add 将本地的所有文件改变添加至暂存区 git commit m 34 fix xx update xx 34 进行commit的提交 git push 推送到远端仓库 如果在git co
  • dockerfile中多个FROM指令的意义(multistage)

    从docker17 05版本开始 xff0c dockerfile中允许使用多个FROM指令 multistage 这是docker17 05版本的release note xff1a https docs docker com engin
  • C++多个头文件中可以定义同名的namespace吗?

    结论 xff1a c 43 43 是支持在多个 h文件中定义同名的namespace的 分两种情况测试 xff1a 1 两个 h文件中namespace名字相同 xff0c 命名空间中成员名称无重复 xff0c 那么他们会合并为一个命名空间
  • k8s pod OOMKilled 错误原因

    k8s oomkilled 错误原因 xff1a 容器使用的内存资源超过了限制 只要节点有足够的内存资源 xff0c 那容器就可以使用超过其申请的内存 xff0c 但是不允许容器使用超过其限制的资源 在yaml文件的resources li
  • 如何在Android上自定义Google窗口小部件

    Google Search is one of the most popular widgets on Android smartphones and tablets It most likely even came preloaded o
  • 解决 OpenCV Error: Insufficient memory (Failed to allocate 3221225472 bytes) in cv::OutOfMemoryError

    现象 xff1a 调用cvLoadImage加载图片时报OpenCV Error Insufficient memory Failed to allocate 3221225472 bytes in cv OutOfMemoryError