学习OpenCV 3(中文版)》 —第二个程序:视频

网友投稿 665 2022-05-29

第二个程序:视频

用OpenCV播放视频就像显示图像一样简单。唯一不同的是,我们需要某种循环来读取视频序列中的每一帧。我们也许还需要一些方法在电影太无聊的时候来帮助跳出循环。

示例2-3:一个简单的播放视频文件的OpenCV程序

#include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" int main( int argc, char** argv ) {

cv::namedWindow( "Example3", cv::WINDOW_AUTOSIZE );   cv::VideoCapture cap;

cap.open( string(argv[1]) );

cv::Mat frame;   for(;;) {

cap >> frame;     if( frame.empty() ) break;             // Ran out of film     cv::imshow( "Example3", frame );     if( cv::waitKey(33) >= 0 ) break;

}

return 0;

}

main函数从创建一个窗口开始(在本例中窗口名为"Example3"),视频读取结构 cv::VideoCapture在其后被加载进来。这个结构可以打开和关闭很多类型的ffmpeg支持的视频文件。

cap.open(string(argv[1])); cv::Mat frame;

《学习OpenCV 3(中文版)》 —第二个程序:视频

视频读取结构通过传入字符串打开文件,这个字符串指示了想要打开的视频文件的路径。一旦视频被打开,视频读取结构将会包含所有的关于这个视频文件可以读取的属性,包括状态信息。以这样的方式创建以后,cv::VideoCapture结构将会在视频的开头被初始化。在这个程序中,cv::Mat frame声明了一个可以保存视频帧的结构。

cap >> frame;

if( frame.empty() ) break;

cv::imshow( "Example3", frame );

一旦内部的while()循环开始执行,视频文件会按照帧从视频流中被读取。这个程序通过if(frame.empty())检查数据是不是真的从视频中读了出来,如果没有,程序将会退出。如果视频帧被成功读取,将通过cv::imshow()显示。

if( cv::waitKey(33) >= 0 ) break;

一旦显示了这帧图片,我们会等待33毫秒。注4如果用户在这段时间在键盘有任何输入,我们将退出循环。如果没有发生,33毫秒之后我们会跳过并执行下一个循环。在退出的时候,所有数据的内存空间将会由于生命周期的结束被自动释放掉。

视频 OpenCV

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:为什么十有八九的初恋都失败了?
下一篇:python二级答案(1)
相关文章