使用C ++ STL而不复制数据

时间:2018-11-06 08:04:52

标签: c++ opencv stl queue

我正在使用Opencv Mat容器从视频流读取帧。我需要当前和以前的帧。

现在,我将在每次迭代结束时将当前帧复制到上一帧。是否可以使用一个STL容器避免这种复制?

std::string VidPath;
VideoCapture VidStream;
cv::Mat Prev,Curr;

if (!VidStream.open(VidPath))
{
    cout << "Cant open video" << endl;
    return 1;
}

VidStream.read(Prev);

while(VidStream.read(Curr))
{
   //do some operations between Curr and Prev 
   Curr.copyTo(Prev)// is it possible to avoid this copy?
}

1 个答案:

答案 0 :(得分:3)

是的,这称为交换。

一种选择是在您的类中保留两个指针。一个用于当前帧,一个用于前一帧。
完成当前帧的处理后,只需交换指针并再次开始处理下一帧(然后可以覆盖当前帧)。

另一种选择是使用两个提供swap方法的'Person or Group',这意味着不进行复制。
其他容器,例如Graph apistd::vector也提供了std::list方法。

搜索双缓冲时,您可能会发现其他信息,这是一种用于显示无闪烁内容的技术。