2019-10-09 简单视频播放

1、代码

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/imgproc/imgproc.hpp" //c++风格图像处理函数

#include <iostream>

using namespace std;

void help(char** argv ) {

std::cout << "\n"

<< "2-03: play video from disk \n"

<< argv[0] <<" <path/video>\n"

<< "For example:\n"

<< argv[0] << " ../tree.avi\n"

<< std::endl;

}

int main( int argc, char** argv ) {

if (argc != 2) {

help(argv);

return 0;

}

  cv::namedWindow( "Example 2-3", cv::WINDOW_AUTOSIZE );

  cv::VideoCapture cap; //视频数据结构,这个结构可以打开关闭很多类型的视频文件

  cap.open( string(argv[1]) );//视频读取结构通过传入视频文件的路径(字符串)来打开文件,

//一旦视频被打开,视频读取结构将会包含所有的关于这个视频文件可以读取的

//属性,包括状态信息。以这样的方式创建以后,cv::VideoCapture结构将会在视频

//的开头被初始化。在这个过程中,cv::Mat frame 声明了一个可以保存视频帧的结构。

      cout <<"Opened file: " <<argv[1] <<endl;

  cv::Mat frame;            //保存视频帧的数据结构

  for(;;) {

    cap >> frame;

    if( frame.empty() ) break; // Ran out of film 判定数据帧是否为空,如果为空意为着播放视频结束跳出循环

    cv::imshow( "Example 2-3", frame );    //显示帧数据

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

//    int c = cv::waitKey(33);

//    for(int i=0;i<32;i++) {

//      cout <<((c&(0x1<<(31-i)))?1:0);

//    }

//      cout <<endl;

//      cout <<"Break key: '" <<(int)c <<"'"<<endl;

//    if( (signed char)c >= 0 ) {

//      break;

//    }

  }

  return 0;

}

2、调试

调试过程可以参考图片显示的运行。如(图1)所示


图1
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容