视频
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;
}