#include "cv.h"
#include "highgui.h"
int main(int argc, char** argv[])
return -1;
}
IplImage *bgr_frame = cvQueryFrame(capture);
//通过cvQueryFrame读入视频
double fps = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
//使用cvGetCaptureProperty来获得视频流的各种属性
CvSize size = cvSize(
(int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT)
);
CvVideoWriter *write = cvCreateVideoWriter(
"hehe.avi", //新建视频文件的名称
CV_FOURCC('M','J','P','G'),//视频压缩的编码格式,此处为MJPG编码格式
fps, //播放的帧率
size, //视频图像的大小,此处为视频的帧率和大小
0
);
IplImage* gray_frame = cvCreateImage(size, IPL_DEPTH_8U, 1);
while ((bgr_frame = cvQueryFrame(capture)) != NULL){
cvConvertImage(
bgr_frame,
gray_frame,
CV_RGB2GRAY
);
cvFlip( gray_frame, NULL, 0 );//翻转图像
//将转换后的图像逐帧写入视频文件
cvWriteFrame(write, gray_frame);
}
cvReleaseVideoWriter(&write);
cvReleaseImage(&gray_frame);
cvReleaseCapture(&capture);
return 0;
#include "highgui.h"
int main(int argc, char** argv[])
{
CvCapture* capture = 0;
capture = cvCreateFileCapture("2.avi");
//打开一个视频文件
if (!capture)
{return -1;
}
IplImage *bgr_frame = cvQueryFrame(capture);
//通过cvQueryFrame读入视频
double fps = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
//使用cvGetCaptureProperty来获得视频流的各种属性
CvSize size = cvSize(
(int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT)
);
CvVideoWriter *write = cvCreateVideoWriter(
"hehe.avi", //新建视频文件的名称
CV_FOURCC('M','J','P','G'),//视频压缩的编码格式,此处为MJPG编码格式
fps, //播放的帧率
size, //视频图像的大小,此处为视频的帧率和大小
0
);
IplImage* gray_frame = cvCreateImage(size, IPL_DEPTH_8U, 1);
while ((bgr_frame = cvQueryFrame(capture)) != NULL){
cvConvertImage(
bgr_frame,
gray_frame,
CV_RGB2GRAY
);
cvFlip( gray_frame, NULL, 0 );//翻转图像
//将转换后的图像逐帧写入视频文件
cvWriteFrame(write, gray_frame);
}
cvReleaseVideoWriter(&write);
cvReleaseImage(&gray_frame);
cvReleaseCapture(&capture);
return 0;
}
8.4.1 说明
程序运行到最终转换完成,需要一段时间。如果程序运行之后,直接把窗口关掉——会发现的确新建成功了,但是转换之后的视频只有一小段。等待几分钟,然后才能彻底转换完成。
此外,注意到为什么把编码格式写成'M','J','P','G'?因为这个是无压缩的&#x