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