大家好我每次从相机中提取一个帧时都试图将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格式,我发现图像是相同的。
我认为这应该是指针问题,因为我试图将整数保存到另一个向量中没有问题。
任何建议如何将不同的图像存储到矢量中?提前谢谢
答案 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;
另见:
scoped_ptr
如何使指针悬空)很一般: