#include<opencv2\core\core.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
VideoCapture capture("d:\\road.avi");
//检测视频是否读取成功
if (!capture.isOpened())
{
cout << "No input image";
return 1;
}
//获取图像帧率
double rate = capture.get(CV_CAP_PROP_FPS);
bool stop = false;
Mat frame;
namedWindow("Example");
int delay = 1000/rate;
while (!stop)
{
if (!capture.read(frame))
break;
imshow("Example",frame);
if (waitKey(delay) >= 0)
stop = true;
}
return 0;
}
要正确地打开视频文件必须确保电脑具有相应的解码器。同时也应该注意文件路径的未知是否正确,路径为止错误经常也会提示错误warning: Error opening file (../../modules/highgui/src/cap_ffmpeg_impl.hpp:545)。这个错误一般都是文件路径错误而导致的。
void processFrame(Mat& img, Mat& out);
// 对视频的每帧做Canny算子边缘检测
void canny(Mat& img, Mat& out)
{
// 先要把每帧图像转化为灰度图
cvtColor(img,out,CV_BGR2GRAY);
// 调用Canny函数
Canny(out,out,100,200);
// 对像素进行翻转
threshold(out,out,128,255,THRESH_BINARY_INV);
}
定义好一个视频处理类,它将与一个回调函数相关联。使用该类,可以创建一个实例,制定输入的视频文件,绑定回调函数,然后开始对每一帧进行处理,要调用这个视频处理类,只需要在main函数添加就可以了:
// 首先创建实例
VideoProcessor processor;
// 打开视频文件
processor.setInput("e:\\road.avi");
// 分别为输入和输出视频
processor.displayInput("Input Video");
processor.displayOutput("Output Video");
// 以原始帧率播放视频
processor.setDelay(1000./processor.getFrameRate());
// 设置处理回调函数
processor.setFrameProcessor(canny);
// 开始帧处理过程
processor.run();
waitKey();
原文地址:http://blog.csdn.net/neal1991/article/details/45009229