【发布时间】:2018-06-05 16:49:11
【问题描述】:
我正在使用 opencv sample train hog,我在函数加载样本中有 2200 个 pos 图像和大约 80000 个负数,我收到此错误
正在加载负图像...OpenCV 错误:OutOfMemoryError 中的内存不足(无法分配 46080 字节),文件 D:\openCv\opencv\sources\modules\core\src\alloc.cpp,第 52 行 OpenCV 错误:创建时断言失败 (u != 0),文件 D:\openCv\opencv\sources\modules\core\src\matrix.cpp,第 433 行 在抛出 'cv::Exception' 的实例后调用终止 what(): D:\openCv\opencv\sources\modules\core\src\matrix.cpp:433: error: (-215) u != 0 in function create
我得到这个的功能是:
void load_images(const String & dirname, vector< Mat > & img_lst, bool showImages = false)
{
vector< String > files;
glob(dirname, files);
for (size_t i = 0; i < files.size(); ++i)
{
Mat img = imread(files[i]); // preia imagine
if (img.empty()) // treci peste daca este imagine invalida
{
cout << files[i] << " is invalid!" << endl;
continue;
}
if (showImages)
{
imshow("image", img);
waitKey(1);
}
if (i == files.size() - 1)
{
cout << "jjj"<< i;
}
cout << files[i] << endl;
img_lst.push_back(img);
if (i == files.size() - 1)
{
cout << "has been pushed";
}
}
}
我怎么能改变这个功能不收到这个错误谢谢:)
【问题讨论】:
-
您是为 64 位还是为 32 位编译。如果您正在编译 32 位,请尝试使用 64 位平台。
-
调整图片大小?您要加载多少数据?使用任何系统监控工具进行监控,看看您分配的内存是否比您意识到的要多。如果您尝试以 10MB 的大小加载 10,000 张图像,则您需要有大约 10GB 或更多的内存,具体取决于它们的存储方式。这可能超出了您系统的能力。
-
@BennoGeels 我认为是 64,但我不知道在哪里检查,问题是两天前一切正常,一切正常,但现在我想为负文件训练两次它并没有不再工作了,在视觉上我只是收到一个错误,调试器粉碎了我在 qt 中发布的内容,我的图像是 64 128
-
@tadman:实际上,应该是 >200GB。 (没有
.reserve调用 img_list)。这是假设 10MB 未压缩图像。如果您有一个 10 MB 的 JPEG,它的内存可能会大得多。 -
@MSalters 也许将这两个值相乘而不是猜测会给我一个更好的答案。感谢您指出这一点!