gpt4 book ai didi

c - 在 cvSetCaptureProperty 中使用 CV_CAP_PROP_POS_FRAMES 获取单个帧

转载 作者:太空狗 更新时间:2023-10-29 16:48:51 25 4
gpt4 key购买 nike

我试图通过设置 CV_CAP_PROP_POS_FRAMES 属性跳转到特定帧,然后像这样读取帧:

cvSetCaptureProperty( input_video, CV_CAP_PROP_POS_FRAMES, current_frame );
frame = cvQueryFrame( input_video );

我面临的问题是,OpenCV 2.1 为 current_frame 的 12 个连续值返回相同的帧,而我想读取每个单独的帧,而不仅仅是关键帧。谁能告诉我哪里出了问题?


查了一下,是解压算法的问题。

MPEG-like算法(包括高清等)并不是对每一帧单独压缩,而是时不时保存一个关键帧,然后只保存最后一帧和后续帧的差异。

您报告的问题是由于当您选择一个帧时,解码器(可能是 ffmpeg)会自动前进到下一个关键帧。

那么,有没有办法解决这个问题?我不仅想要关键帧,还想要每个单独的帧。

最佳答案

我不知道这对于您的目的是否足够精确,但我已经成功地通过获取帧速率、将帧数转换为时间来到达 MPEG 视频中的特定点,然后与时俱进。像这样:

cv::VideoCapture sourceVideo("/some/file/name.mpg");
double frameRate = sourceVideo.get(CV_CAP_PROP_FPS);
double frameTime = 1000.0 * frameNumber / frameRate;
sourceVideo.set(CV_CAP_PROP_POS_MSEC, frameTime);

关于c - 在 cvSetCaptureProperty 中使用 CV_CAP_PROP_POS_FRAMES 获取单个帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11469281/

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