存储在矢量中的图像都是相同的

时间:2017-12-01 17:14:29

标签: c++ qt spinnaker

我正在创建一个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();

2 个答案:

答案 0 :(得分:1)

正如我之前在评论中所评论的那样,在检查了documentation后,ImagPtr是一个智能指针&#39;管理代码中的资源Image。但是当你写这行pResultImage->Release();时,你正在直接删除图像,所以你丢失了它。

我建议您删除此行并避免释放图像,然后您可以看到存储在矢量中的图像。

答案 1 :(得分:0)

解决方案是使用DeepCopy功能:

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