Недостаточно памяти opencv

Я новичок в OpenCV и C ++.
Я пытаюсь написать код PCA для распознавания лиц, используя 3 разных лица. Для этого каждое изображение (размером 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: недостаточно памяти (не удалось выделить 144004 байта) в OutOfMemoryError

Мой размер изображения 180х200. Я не знаю что делать? Также, как я могу сформировать вектор строки в opencv, используя C ++? (Для вычисления ковариации мне нужно умножить разностный вектор на его значение).

3

Решение

Я не знаю OpenCV и его типов. Но твой typedef выглядит подозрительно

Я предполагаю, что ошибка возникает при создании imgXv случаи Row, За каждый звонок Row imgXv(36000,img1); создан вектор, состоящий из 36000 экземпляров Mat которые все копии imgX экземпляров. Посмотреть конструктор 2) из std::vector::vector в cppreference.com:

vector( size_type count, const T& value, const Allocator& alloc = Allocator()); (2)

2) Создает контейнер с количеством копий элементов со значением value.

Итак, вы пытаетесь сохранить 108003 изображения в памяти. Каждое из ваших изображений состоит из 36000 пикселей. Если каждый пиксель представлен по крайней мере 1 байтом, это займет минимум 3,6 ГБ памяти.

Исходя из того, что я понимаю из вашего подхода, вы не хотите этого, а скорее typedef vector<float> Row; а также Row imgXv(36000);

1

Другие решения


По вопросам рекламы [email protected]