【问题标题】:Is it possible to get a pointer to two different frames in a video sequence at the same time with OpenCV?是否可以使用 OpenCV 同时获得指向视频序列中两个不同帧的指针?
【发布时间】:2012-09-24 02:39:56
【问题描述】:

您可以像这样访问视频序列中的特定帧:

capture.set(CV_CAP_PROP_POS_FRAMES, frame_num);
capture >> frame;

然后您可以像这样访问一个单独的框架:

capture.set(CV_CAP_PROP_POS_FRAMES, frame_num - 20);
capture >> frame2;

但是,当您使用CV_CAP_PROP_POS_FRAMES 设置捕获属性时,它实际上会移动第一个指针,并且frameframe2 最终指向相同的数据,包含相同的值。

我想要一个指向两者的指针,所以我不必克隆数据(昂贵的计算),但我可以在两个帧之间进行比较。如何用 OpenCV 做到这一点?

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    您可以复制第一帧:

    Mat frame1 = frame.clone();
    

    【讨论】:

    • 是的。这是在最后一段中指出的。在一个非常大的矩阵上多次克隆会很昂贵,所以我试图避免这种情况。
    • 无论如何你都需要一个副本——在你的代码中或在 OpenCV 中。
    • 好吧,当我捕获>>帧时,它不只是指向该特定帧的视频文件的指针吗?所以如果我能得到其中的两个......因为我需要两次设置那个指针。这是不必要的开销
    • 不,不是。通常视频文件中的帧被压缩/编码,根本不可能获取指针。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多