[英]Insufficient memory opencv
我是 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 中的內存不足(無法分配 144004 字節)
我的圖像大小是 180x200。 我不知道該怎么辦? 另外,如何使用 C++ 在 opencv 中形成行向量? (為了計算協方差,我需要將差分向量與其轉置相乘)。
我不知道 OpenCV 及其類型。 但是你的typedef
看起來很可疑。
我的猜測是在創建Row
的imgXv
實例時發生錯誤。 對於Row imgXv(36000,img1);
每次調用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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.