1.读取视频文件
#include<opencv2/opencv.hpp>
using namespace cv;
void main(){
VideoCapture cap;
cap.open("E://2.avi"); //打开视频,以上两句等价于VideoCapture cap("E://2.avi");
//cap.open("http://www.laganiere.name/bike.avi");//也可以直接从网页中获取图片,前提是网页有视频,以及网速够快
if(!cap.isOpened())//如果视频不能正常打开则返回
return;
Mat frame;
while(1)
{
cap>>frame;//等价于cap.read(frame);
if(frame.empty())//如果某帧为空则退出循环
break;
imshow("video", frame);
waitKey(20);//每帧延时20毫秒
}
cap.release();//释放资源
}
2.获取视频信息
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
void main(){
VideoCapture cap;
cap.open("E:\\2.avi"); //打开视频,等价于 VideoCapture cap("E://2.avi");
if(!cap.isOpened())
return;
int width = cap.get(CV_CAP_PROP_FRAME_WIDTH); //帧宽度
int height = cap.get(CV_CAP_PROP_FRAME_HEIGHT); //帧高度
int frameRate = cap.get(CV_CAP_PROP_FPS); //帧率 x frames/s
int totalFrames = cap.get(CV_CAP_PROP_FRAME_COUNT); //总帧数
cout<<"视频宽度="<<width<<endl;
cout<<"视频高度="<<height<<endl;
cout<<"视频总帧数="<<totalFrames<<endl;
cout<<"帧率="<<frameRate<<endl;
Mat frame;
while(1)
{
cap>>frame;//等价于cap.read(frame);
if(frame.empty())
break;
imshow("video", frame);
if(waitKey(20)>0)
break;
}
cap.release();
}
3.读取摄像头
#include<opencv2/opencv.hpp>
using namespace cv;
void main(){
VideoCapture cap;
cap.open(0); //打开摄像头
if(!cap.isOpened())
return;
Mat frame;
while(1)
{
cap>>frame;//等价于cap.read(frame);
Canny(frame, frame, 30, 100);//canny边缘检测,去掉这一行就是纯粹的读取摄像头了
//cvtColor(frame, frame, CV_BGR2HSV);//BGR空间转为HSV颜色空间,注意,两者不能同时对同一张图片(在此为frame)进行处理,否则报错
if(frame.empty())
break;
imshow("video", frame);
if(waitKey(20)>0)//按下任意键退出摄像头 因电脑环境而异,有的电脑可能会出现一闪而过的情况
break;
}
cap.release();
destroyAllWindows();//关闭所有窗口
}
4.写入视频
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
void main(){
VideoCapture cap;
cap.open("E://2.avi");
Size size0=Size(cap.get(CV_CAP_PROP_FRAME_WIDTH),cap.get(CV_CAP_PROP_FRAME_HEIGHT));
VideoWriter writer("E://out.avi",-1,cap.get(CV_CAP_PROP_FPS),size0,false);
if(!cap.isOpened())
return;
Mat frame;
while(1)
{
cap>>frame;
Canny(frame,frame,30,100);
if(frame.empty())
break;
writer<<frame;//等同于writer.write(frame);
imshow("video", frame);
if(waitKey(10)>0)
break;
}
cout<<"write end!";
cap.release();
destroyAllWindows();
}