主要内容:

1、讲解VideoCapture类,读取视频或摄像头

2、讲解VideoWriter类,写视频文件

先上ppt:

opencv读取摄像头 opencv读取摄像头视频_ide

opencv读取摄像头 opencv读取摄像头视频_OpenCV_02

opencv读取摄像头 opencv读取摄像头视频_opencv读取摄像头_03

opencv读取摄像头 opencv读取摄像头视频_opencv读取摄像头_04

opencv读取摄像头 opencv读取摄像头视频_#include_05

opencv读取摄像头 opencv读取摄像头视频_opencv读取摄像头_06

opencv读取摄像头 opencv读取摄像头视频_ide_07

opencv读取摄像头 opencv读取摄像头视频_OpenCV_08

opencv读取摄像头 opencv读取摄像头视频_OpenCV_09

代码:读取视频或摄像头,并加入简单处理效果

//读取视频或摄像头,并加入简单处理效果
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
void main()
{
    VideoCapture cap("2.avi"); //读取视频方法一
    //VideoCapture cap("http://www.laganiere.name/bike.avi");//也可以是网络视频
    //VideoCapture cap;        //读取视频方法二
	//cap.open("E:\\2.avi"); 
    //cap.open(0);             //读取摄像头
    if(!cap.isOpened())        //检查视频/摄像头打开是否成功
         return;
    Mat frame;                 //定义Mat变量,用来存储每一帧
    //循环显示每一帧
    while(1)
    {
        cap>>frame;            //读取当前帧方法一
        //cap.read(frame);     //读取当前帧方法二
        //加入简单图像处理效果
        Canny(frame, frame, 30, 100);         //Canny边缘检测
        //cvtColor(frame, frame, CV_BGR2HSV); //颜色空间转换到HSV
        if(!frame.empty())     //对当前帧进行异常检测
        {
            imshow("video", frame);
           //用waitKey()返回值判断退出预览
           if(waitKey(30)==27) //指定Esc键退出
               break;
        }
        else
            break;
    }
    cap.release();            //关闭视频流文件
}

运行结果:

opencv读取摄像头 opencv读取摄像头视频_OpenCV_10

代码:打开视频,加入简单处理效果,写视频到本地

//打开视频,进行candy边缘检测,写视频到本地
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace cv;
using namespace std;

void main()
{
	 VideoCapture cap("2.avi"); //读取视频方法一
    //VideoCapture cap;         //读取视频方法二
	//cap.open("E:\\2.avi"); 
    //VideoCapture cap("http://www.laganiere.name/bike.avi");//也可以是网络视频
    //cap.open(0);              //读取摄像头
    if(!cap.isOpened())         //检查视频/摄像头打开是否成功
		return;
    //VideoCapture的get方法返回指定视频类的相关参数信息
	double width = cap.get(CV_CAP_PROP_FRAME_WIDTH);  //帧宽度
	double height = cap.get(CV_CAP_PROP_FRAME_HEIGHT); //帧高度
	double frameRate = cap.get(CV_CAP_PROP_FPS);  //帧率 x frames/s
	double totalFrames = cap.get(CV_CAP_PROP_FRAME_COUNT); //总帧数
    //输出视频相关参数信息
	cout<<"视频宽度="<<width<<endl;
	cout<<"视频高度="<<height<<endl;
	cout<<"视频总帧数="<<totalFrames<<endl;
	cout<<"帧率="<<frameRate<<endl;
	
	Size size0 = Size(cap.get(CV_CAP_PROP_FRAME_WIDTH), cap.get(CV_CAP_PROP_FRAME_HEIGHT));
	//VideoWriter类的构造函数
    //VideoWriter writer("E:\\out.avi", CV_FOURCC('X', 'V', 'I', 'D'), 20, size0, true);
	VideoWriter writer("E:\\out.avi", //文件名
                        -1, //编解码器,写入视频前需安装对应的编解码器。
                            //这里填-1,不指定编解码方式,程序运行时会跳出窗口让我们选择
                        cap.get(CV_CAP_PROP_FPS),//播放帧率
                        size0,//帧尺寸,生成视频尺寸需与读取视频尺寸一致
                               //若不一致,则写入的视频会出错。
                        false);//是否创建彩色视频,生成视频是否支持彩色应与构造函数设置一致
                              //因为后面进行candy检测,每一帧都变成了黑白二值图像,所以这里应填false
                              //如果填true,则写入的视频会出错
	
	Mat frame;                 //定义Mat变量,用来存储每一帧
    //循环显示每一帧
	while(1)
	{
        cap>>frame;            //读取当前帧方法一
        //cap.read(frame);     //读取当前帧方法二
        
        if(frame.empty())      //对当前帧进行异常检测
			break;
        
        //加入简单图像处理效果
        Canny(frame, frame, 30, 100);         //Canny边缘检测
        //cvtColor(frame, frame, CV_BGR2HSV); //颜色空间转换到HSV
        imshow("video", frame);  
        
        //写入帧       
       writer<<frame;  //写入帧方法一
		//writer.write(frame); //写入帧方法二
     
        //用waitKey()返回值判断退出预览
        if(waitKey(30)>0)   //如果有按键.对于waitKey,若没有按键按下则返回-1.
			break;
	}
	cout<<"write end!";
	cap.release();  //关闭视频流文件
	destroyAllWindows();
}

运行结果:

写入本地的out.avi

opencv读取摄像头 opencv读取摄像头视频_图像处理_11