存储在矢量中的图像都是相同的
Images stored in vector are all identical
我正在创建一个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();
}
相关文章:
- 如何将图像传入C++可执行文件并将输出图像存储在新目录中?
- 存储将单个查询图像与多个图像的列表匹配的关键点索引
- 如何将捕获的图像存储在OpenCV中(将图片保存到计算机)
- 如何将多个图像存储到多个矩阵中
- 存储在矢量中的图像都是相同的
- 如何创建矩阵的矢量来存储大量的图像
- 对整个垫子图像进行排序并在 OpenCV 中存储索引
- 将图像存储在垫子矢量中
- 获取存储在矩阵中的图像 ROI 的平均 R、G 和 B
- 如何以最佳方式将高分辨率图像数据存储在无符号字符*中C++
- 如何将来自不同图像的多个描述符存储在C++和OpenCV中的向量向量中
- 为 ppm/pgm 图像数据创建存储
- 从数据库中以 blob 数据类型形式存储的原始图像数据中检索 CImage 对象
- OpenCV代码将存储在列表中的描述符与新的图像描述符进行比较
- 如何将图像中的每个像素作为16位索引存储到颜色表中
- 存储矢量的精确内存图像
- 如何将图像存储为 1*n 浮点向量
- 逐像素比较2个图像(第一个图像存储在数据库中)
- 多图像存储kinect与不同的名称
- 如何从网络摄像机获取图像并将图像存储在openCV中