最近要处理一个停车场的视频数据,但是拿不到各种状态的停车场图片,所以就PS各种图片然后和已有视频图像进行组合。所以就写了下面这段代码。
先介绍一下CvVideoWriter和cvWriteFrame函数:
CvVideoWriter* cvCreateVideoWriter ( const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1 );
filename 输出视频文件名。
fourcc为 四个字符用来表示压缩帧的codec
fps 被创建视频流的帧率。
frame_size 视频流的大小。
is_color 如果非零,编码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)。
int cvWriteFrame( CvVideoWriter* writer, const IplImage* image );
writer
视频写入器结构。
image
被写入的帧。
函数cvWriteFrame写入/附加到视频文件一帧。
#include "opencv\cv.h"
#include "opencv\cxcore.h"
#include "opencv\highgui.h"
using namespace cv;
using namespace std;
int main() {
IplImage *Imgin = cvLoadImage("1.jpg", 1); //读取图片
CvVideoWriter* video = cvCreateVideoWriter("2.avi", CV_FOURCC('P', 'I', 'M', '1'), 20, cvSize(Imgin->width, Imgin->height), 1); //创建新视频
CvCapture *cap;
cap = cvCreateFileCapture("1.avi");
IplImage *imgVideo ;
//在新视频前插入图片
int i;
for (int x = 0; x < 50; x++) {
i = cvWriteFrame(video, Imgin);
}
//插入视频
int q ;
while (imgVideo = cvQueryFrame(cap)) {
q = cvWriteFrame(video, imgVideo);
}
if (video) {
cvReleaseVideoWriter(&video);
cvReleaseImage(&imgVideo);
cvReleaseImage(&imgVideo);
cvReleaseImage(&Imgin);
}
return 0;
}