内存不足
Insufficient memory opencv
本文关键字:内存不足 更新时间:2023-10-16
我是OpenCV和c++的初学者。我正试图使用3个不同的面孔为人脸识别编写PCA代码。为此,每个图像(大小为d=mxn)被重塑为包含d个元素的列向量。
typedef vector<Mat> Row;
Row img1v(36000,img1);
Row img2v(36000,img2);
Row img3v(36000,img3);
我计算图像的均值向量如下:
Row meanImg;
for(int i=0;i<img1v.size();++i)
{
meanImg.push_back((img1v[i]+img2v[i]+img3v[i])/3);
}
cout<<meanImg.size()<<endl;
这里我得到了一个错误:
OpenCV错误:OutOfMemoryError (Failed to allocate 144004 bytes)
我的图像大小是180x200。我不知道该怎么办?也我怎么能形成一个行向量在opencv使用c++ ?(为了计算协方差,我需要将差向量与其转置相乘)
我不知道OpenCV及其类型。但是你的typedef
看起来很可疑。
我的猜测是错误发生在创建Row
的imgXv
实例时。对于Row imgXv(36000,img1);
的每次调用,创建一个由36000个Mat
实例组成的向量,这些实例都是imgX
实例的副本。参见cppreference.com中std::vector::vector
的构造器2):
vector( size_type count, const T& value, const Allocator& alloc = Allocator());
(2)2)构造带有value元素的count个副本的容器
所以你试图保持108003图像在内存中。你的每张图像由36000像素组成。如果每个像素至少用1个字节表示,这将至少占用3.6 GB内存。
从你的方法中我得到的你不想要的,而是一个typedef vector<float> Row;
和Row imgXv(36000);
相关文章:
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 在内存不足之前,我可以声明多少个 const 变量?
- 如何避免由于内存不足而导致 gcc 崩溃
- 检测到由于操作系统内存不足而导致子进程终止
- 导出 vulkan 内存分配句柄会导致设备内存不足
- 如何消除ROS打开CV中的内存不足错误?
- 32 位应用程序内存不足
- 在本机 Android 应用中处理内存不足
- 在 Linux 上C++的无限循环中捕获内存不足的错误 bad_alloc()
- 处理静态数组内存C++的内存不足情况
- 访问违规可以是一个伪装的内存不足错误吗
- g++ 内存不足为 std::bitset 分配
- C++ 分配器在内存不足时使应用程序崩溃
- 使用队列的非递归回溯:内存不足
- C++ : 内存不足时应返回什么?
- 使用 sqlite3 时内存不足
- std::int 和 struct 内存不足的映射 (std::Bad_alloc) c++
- SQLITE 内存不足 无法执行语句
- 内存不足的概念
- 从 c# 内存不足异常调用 c++ 委托