《实用OpenCV》<四> 图像和GUI窗口的基本操作(4)

视频

      OpenCV处理视频是需要FFMPEG支持的。(注:你可能会需要一个libiconv-2.dll)

显示摄像头图像

例4-4 显示默认摄像头视频

// Program to display a video from attached default camera device
// Author: Samarth Manoj Brahmbhatt, University of Pennsylvania
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
    // 0是笔记本内置摄像头的ID,想使用其他摄像头可以改变该值
    VideoCapture cap(0);
    //检查是否正确打开
    if(!cap.isOpened())
    {
         cout << "Capture could not be opened successfully" << endl;
        return -1;
     }
   namedWindow("Video");
   //循环播放直到停止
   while(char(waitKey(1)) != 'q' && cap.isOpened())
  {
      Mat frame;
      cap >> frame;//注:这里重载操作符 读取截图
      //检查视频是否结束
      if(frame.empty())
      {
          cout << "Video over" << endl;
          break;
       }
       imshow("Video", frame);
   }
 return 0;
}
例4-5 显示本地视频

// Program to display a video from a file
// Author: Samarth Manoj Brahmbhatt, University of Pennsylvania
// Video from: http://ftp.nluug.nl/ftp/graphics/blender/apricot/trailer/sintel_trailer-480p.mp4
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
     // 创建VideoCapture对象来读取视频文件
     VideoCapture cap("video.mp4");
    //check if the file was opened properly
    if(!cap.isOpened())
    {
         cout << "Capture could not be opened succesfully" << endl;
         return -1;
     }
     namedWindow("Video");
    // Play the video in a loop till it ends
    while(char(waitKey(1)) != 'q' && cap.isOpened())
   {
       Mat frame;
       cap >> frame;
      // Check if the video is over
      if(frame.empty())
     {
          cout << "Video over" << endl;
          break;
      }
      imshow("Video", frame);
    }
  return 0;
}

写入视频到硬盘

     VideoWriter对象可以写入视频到硬盘。构造函数需要以下参数:

        • 输出文件名

        • 输出文件编码解码器。接下来的代码里, 我们使用常见的MPEG编码解码器。你可以通过 CV_FOURCC宏来指定。各种编码解码器表示的四字符串可以参考 www.fourcc.org/codecs.php。前提是你的电脑上装有该编码解码器。

       • 帧率

       • 帧大小

     你可以通过VideoCapture对象的get()方法来获得视频的一些属性(比如大小,帧率,亮度,对比度,曝光量等等)。

例4-6 从默认摄像头设备写入视频

// Program to write video from default camera device to file
// Author: Samarth Manoj Brahmbhatt, University of Pennsylvania
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
     // 0 is the ID of the built-in laptop camera, change if you want to use other camera
     VideoCapture cap(0);
    //check if the file was opened properly
    if(!cap.isOpened())
    {
        cout << "Capture could not be opened succesfully" << endl;
        return -1;
    }
    // Get size of frames
    Size S = Size((int) cap.get(CV_CAP_PROP_FRAME_WIDTH), (int)
    cap.get(CV_CAP_PROP_FRAME_HEIGHT));
    // Make a video writer object and initialize it at 30 FPS
    VideoWriter put("output.mpg", CV_FOURCC('M','P','E','G'), 30, S);
    if(!put.isOpened())
    {
        cout << "File could not be created for writing. Check permissions" << endl;
        return -1;
    }
    namedWindow("Video");
    // Play the video in a loop till it ends
    while(char(waitKey(1)) != 'q' && cap.isOpened())
   {
       Mat frame;
       cap >> frame;
       // Check if the video is over
       if(frame.empty())
       {
           cout << "Video over" << endl;
           break;
       }
       imshow("Video", frame);
       put << frame;
    }
  return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值