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

Images stored in vector are all identical

本文关键字:图像 存储      更新时间:2023-10-16

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

正如我在评论中所说的那样,在检查了文档后,Imagptr是一个'智能指针',用于管理代码中的资源图像。但是,当您编写此行pResultImage->Release();时,您将直接擦除图像,因此您丢失了图像。

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

解决方案是使用DeepCopy函数:

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