我正在使用opencv样本列车猪,我有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:错误:(-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";
}
}
}
如何更改此功能以便不会收到此错误,谢谢:)
答案 0 :(得分:0)
我在这里看到的主要错误是缺少std::vector::reserve
电话。你有一个相当不错的估计你会有多少图像(忽略你跳过的空图像)。由于您不打电话给.reserve
,vector
将需要使用指数增长策略,该策略通常会分配1.5或2倍。