gpt4 book ai didi

video - OpenCV 搜索功能/倒带

转载 作者:太空宇宙 更新时间:2023-11-03 20:37:34 25 4
gpt4 key购买 nike

我一直在尝试在 C++ 中使用 OpenCV 来查找/实现一个搜索和倒带功能(用于视频 (.avi)),但我无法找到实现它的方法,除了遍历整个文件一次并保存每个图像。还有其他办法吗?

任何帮助将不胜感激;提前致谢!

最佳答案

使用 cvSetCaptureProperty() 可以循环帧,以毫秒为单位或按帧序号。

int cvSetCaptureProperty( CvCapture* capture, int property_id, double value );

property_id 是您需要使用的属性。它可以是以下之一:

  1. CV_CAP_PROP_POS_MSEC - 从文件开始的位置(以毫秒为单位)
  2. CV_CAP_PROP_POS_FRAMES - 框架中的位置
  3. CV_CAP_PROP_POS_AVI_RATIO - 以相对单位表示的位置(0 - 文件开头,1 - 文件结尾)
  4. CV_CAP_PROP_FRAME_WIDTH - 视频流中帧的宽度(仅适用于相机)
  5. CV_CAP_PROP_FRAME_HEIGHT - 视频流中帧的高度(仅适用于相机)
  6. CV_CAP_PROP_FPS - 帧速率(仅适用于相机)
  7. CV_CAP_PROP_FOURCC - 编解码器的 4 字符代码(仅适用于相机)。

前两个是您感兴趣的。

编辑:更多信息:)

您可以通过使用各种帧索引重复调用上述函数来循环帧。

cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, frameIndex);

例子:

IplImage*  frame;
CvCapture* capture = cvCreateFileCapture("test.avi");

/* iterate through first 10 frames */
for (int i = 0; i < 10; i++)
{
/* set pointer to frame index i */
cvSetCaptureProperty(capture, CV_CAP_POS_FRAMES, i);

/* capture the frame and do sth with it */
frame = cvQueryFrame(capture);
}

您可以放置​​类似的代码,以便在每次用户单击按钮以快进/快退视频时执行。

C++ 方法(OpenCV 2 及更高版本)将使用此方法代替相同的 property_id 和值。

bool VideoCapture::set(int property_id, double value)

关于video - OpenCV 搜索功能/倒带,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2974625/

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