OpenCV 视频处理框架

来源:互联网 发布:mysql dateformat用法 编辑:程序博客网 时间:2024/05/17 03:28

OpenCV 本身集成了 FFmpeg,因此对于视频是有解码和编码功能的。虽然其效率在本人看来还不能跟未被封装的FFmpeg相提并论,然用其来对视频进行解码得到图像,然后对图像进行处理并将得到的图像重新压缩成视频是非常方便的,下面将介绍把视频解码成图像并进行帧差法等操作后往回压缩成视频的框架搭建,值得注意的是在OpenCV2.1版本图像压缩成视频是有BUG的,最好还是用新的版本来进行学习。除此之外,要让opencv支持压缩,还需要装相对应的编码器,详情可见。

#include <opencv2/opencv.hpp>  #include "opencv2/highgui/highgui.hpp"   #include <opencv2/core/core.hpp>using namespace cv;CvVideoWriter * pVW = NULL;//写回文件对象void MotionDetect(IplImage *frame1, IplImage *frame2)//两帧图像处理函数{//在此加入图像处理代码}void main(){IplImage *frame1 = NULL, *frame2 = NULL;//frame1为新的图像,frame2为frame1的前一张图像CvCapture *capture = NULL;capture = cvCaptureFromAVI("2.avi");//打开视频frame1 = cvQueryFrame(capture);//从摄像头或者文件中抓取并返回一帧frame2 = cvCreateImage(cvGetSize(frame1), 8, 3);cvCopy(frame1, frame2);frame1 = cvQueryFrame(capture);pVW = cvCreateVideoWriter("output.avi", CV_FOURCC('D', 'I', 'V', 'X'), 30, cvSize(frame1->width, frame1->height), 1);//以mpeg4数据格式进行视频编码,帧率为30帧/swhile (frame1){MotionDetect(frame1, frame2);//移动侦测cvCopy(frame1, frame2);cvShowImage("", frame2);//显示处理完图像cvWaitKey(5);cvWriteFrame(pVW, frame2);//将处理完图像数据写入视频frame1 = cvQueryFrame(capture);//接着从视频中拷入图像}cvReleaseImage(&frame2);cvReleaseVideoWriter(&pVW);}










1 0