gpt4 book ai didi

c++ - 使用 OpenCV 复制指向的对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:34:00 26 4
gpt4 key购买 nike

我不是 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 is defined as a POD struct

typedef struct _IplImage
{
// ...
char *imageData;
// ...
}
IplImage;

如您所见,new IplImage(*current_frame) 仅复制指针(尤其是 imageData),而不是实际数据。因此,您在两张图片中错误地共享了数据。

我建议您在这里阅读 C++ 包装器,尤其是如何使用它们进行内存管理:http://opencv.willowgarage.com/documentation/cpp/memory_management.html

编辑如果您想使用 C API:

currFrame = cvQueryFrame( cap );

// Clone the frame to have an identically sized and typed copy
prevFrame = cvCloneImage( currFrame );

关于c++ - 使用 OpenCV 复制指向的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8107477/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com