有没有办法在OpenCV中随机读取视频帧....就像使用索引访问数组一样?否则,如果我想在CPU或GPU中加载完整的视频,我该怎么办?
您可以set(int propId, double value)在视频捕获上使用该方法(也可以查看文档),其中propId可以是以下之一:
CV_CAP_PROP_POS_MSEC:视频文件的当前位置(以毫秒为单位).CV_CAP_PROP_POS_FRAMES:下一个要解码/捕获的帧的从0开始的索引.CV_CAP_PROP_POS_AVI_RATIO:视频文件的相对位置:0 - 电影的开始,1 - 电影的结束.在50秒内播放视频的小例子:
int main( int argc, char **argv )
{
namedWindow("Frame", CV_WINDOW_NORMAL);
Mat frame;
VideoCapture capture(argv[1]);
if (!capture.isOpened())
{
//error in opening the video input
cerr << "Unable to open video file: " << argv[1] << endl;
exit(EXIT_FAILURE);
}
capture.set(CV_CAP_PROP_POS_MSEC, 50000);
for (;;)
{
//read the current frame
if (!capture.read(frame))
{
cerr << "Unable to read next frame." << endl;
cerr << "Exiting program!" << endl;
exit(EXIT_FAILURE);
}
imshow("Frame", frame);
waitKey(20);
}
}
Run Code Online (Sandbox Code Playgroud)