每当我添加到矢量时,IplImage变量都会被覆盖

时间:2015-03-26 07:48:32

标签: pointers boost

大家好我每次从相机中提取一个帧时都试图将IplImage添加到矢量中,但不知何故,我的矢量中存储的IplImage总是被最新帧覆盖

我要存储的变量是image.get(),图像定义为

boost::scoped_ptr<IplImage> image(cvCreateImage(size, IPL_DEPTH_32F, 1));

我创建了一个矢量来存储我的图像,如下所示

cv::vector< const IplImage*> buffer;

我使用函数push_back将图像添加到缓冲区

buffer.push_back(image.get());

之后我尝试将图像保存为缓冲区中每个变量的png格式,我发现图像是相同的。

我认为这应该是指针问题,因为我试图将整数保存到另一个向量中没有问题。

任何建议如何将不同的图像存储到矢量中?提前谢谢

1 个答案:

答案 0 :(得分:0)

等一下。你知道scoped_ptr<>做了什么吗?

IplImage const* store_this_somewhere; // e.g. in your vector
{
    boost::scoped_ptr<IplImage> image(cvCreateImage(size, IPL_DEPTH_32F, 1));

     store_this_somewhere = image.get();

 } // HERE `image` is destructed and **deletes** the image

 // store_this_somewhere is **dangling** here and dereferencing it is 
 // UB

我认为你有 Undefined Behaviour 因为图片被删除了。下次你获取截图时,分配的内存可能恰好位于相同的位置,导致&#34;旧的&#34;悬空,指针似乎指向最新的屏幕抓取。

要么不使用指针,使用智能指针:

cv::vector< boost::scoped_ptr<const IplImage*> > buffer;

另见:

很一般:​​