簡體   English   中英

內存不足opencv

[英]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看起來很可疑。

我的猜測是在創建RowimgXv實例時發生錯誤。 對於Row imgXv(36000,img1);每次調用Row imgXv(36000,img1); 創建一個向量,由 36000 個Mat實例組成,這些實例都是imgX實例的副本。 參見cppreference.comstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM