用OpenCV复制一个指向对象
Copying a pointed-to object with OpenCV
我不是一个很好的c++程序员,我更习惯c#和Java,因为它们不需要担心指针。我认为我明白我在这里做了什么,但结果不是我所期望的,我不确定是我在这里做了一些愚蠢的事情,还是程序中的其他地方引起了问题。
无论如何,我正在使用OpenCV,我有两个图像,我像这样初始化:
IplImage *current_frame = NULL;
IplImage *previous_frame = NULL;
然后是这段代码:
if (current_frame != NULL)
{
previous_frame = new IplImage(*current_frame);
current_frame = cvQueryFrame( capture );
}
else
{
current_frame = cvQueryFrame( capture );
previous_frame = cvQueryFrame( capture );
}
这个想法是,第一次执行代码,当前和前一帧将使用新捕获的图像,但对于后续帧,previous_frame将采用current_frame的前一个值,并且current_frame捕获一个新的图像(我已经完成了代码,它将进入if语句的正确分支)。
实际发生的情况是,我输出的两个帧是相同的,而不是像我希望的那样,previous_frame延迟一个。
我是否误用了指针?如果是这样,我该如何获得我想要的行为呢?或者它看起来像我想要的那样?
谢谢。
我怀疑您正在使用原始的C API:这里IplImage
被定义为POD结构
typedef struct _IplImage
{
// ...
char *imageData;
// ...
}
IplImage;
可以看到,new IplImage(*current_frame)
只复制指针(特别是imageData
),而不是实际数据。所以你是在虚假地共享两张图像中的数据。
我建议您在这里阅读c++包装器,特别是如何使用它们进行内存管理:http://opencv.willowgarage.com/documentation/cpp/memory_management.html
EDIT如果你想使用C API:
currFrame = cvQueryFrame( cap );
// Clone the frame to have an identically sized and typed copy
prevFrame = cvCloneImage( currFrame );
相关文章:
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 从多个源构造一个对象,包括一个对象向量
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 检查哪个对象调用了另一个对象的对象方法
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 包装一个对象并假装它是一个 int
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- 如何使用函数将一个对象的输入复制到另一个对象中
- 选择一个元素而不是一个对象的数组的原因
- 为什么我可以使用 memcpy 将一个对象变量复制到另一个对象变量
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- 打印对象的映射,其中另一个对象作为键
- 如何通过另一个对象中的命令正确地从一个对象返回数据
- 为什么将两个对象分配给另一个对象后,两个对象不一样?
- 绘制一个对象,比较模具缓冲区的两个不同值