Изображения, хранящиеся в векторе, идентичны

Я создаю приложение C ++ для записи изображений с помощью камеры, используя библиотеку Spinnaker. Чтобы улучшить производительность, я решил временно сохранить изображения в векторе и сохранить их потом. Но так как я решил сохранить их после, все изображения идентичны (несмотря на то, что камера все еще движется), и я не понимаю, почему …

Вот упрощенная версия моего кода:

CameraPtr pCam = camList.GetByIndex(0);
unsigned int imageCnt = 0;
pCam->BeginAcquisition();
vector<ImagePtr> images;

QTime t_end = QTime::currentTime();
t_end = t_end.addSecs(sb_duration->value());

while (QTime::currentTime() < t_end) {
ImagePtr pResultImage = pCam->GetNextImage();
images.push_back(pResultImage);
pResultImage->Release();
}

for (unsigned int i = 0; i < images.size(); i++)
{
ostringstream filename;
filename << s_folder << "/Image #" << i << ".jpg";

ImagePtr pResultImage = images[i];
pResultImage->Save(filename.str().c_str());

i_progress = ((double) i / imageCnt) * 50 + 50;
p_progress->setValue(i_progress);

qInfo() << "Image #" << i << "saved.";
}

pCam->DeInit();

1

Решение

Как я прокомментировал ранее в комментарии, и после проверки немного документация, ImagPtr — это «умный указатель» для управления ресурсом Образ в вашем коде. Но когда вы пишете эту строку pResultImage->Release(); Вы непосредственно стираете изображение, поэтому вы его потеряли.

Я рекомендую вам удалить эту строку и не выпускать изображение, а затем вы можете увидеть изображение, которое вы храните в векторе.

1

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

Решением было использовать функцию DeepCopy:

while (QTime::currentTime() < t_end) {
ImagePtr pResultImage = pCam->GetNextImage();
ImagePtr pCopyImage = Image::Create();
pCopyImage->DeepCopy(ip_ResultImage);
images.push_back(pCopyImage);
pResultImage->Release();
}
0

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