jpg图片转换为avi视频

来源:互联网 发布:java高斯模糊 编辑:程序博客网 时间:2024/04/29 18:29

要用到视频序列,目前只有jpg图片,所以参考了一些网络资料,并做修改,转化测试成功。

程序:

#include <stdlib.h>#include <stdio.h>#include <math.h>#include <cv.h>#include <highgui.h>#define NUM_FRAME 300 //只处理前300帧,根据视频帧数可修改void Video_to_image(char* filename,const char* dirname){printf("------------- video to image ... ----------------\n");//初始化一个视频文件捕捉器CvCapture* capture = cvCaptureFromAVI(filename);//获取视频信息//cvQueryFrame(capture);int frameH = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);int frameW = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);int fps = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);int numFrames = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);printf("\tvideo height : %d\n\tvideo width : %d\n\tfps : %d\n\tframe numbers : %d\n", frameH, frameW, fps, numFrames);//定义和初始化变量int i = 0;IplImage* img = 0;char image_name[130];cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);//读取和显示while (1){img = cvQueryFrame(capture); //获取一帧图片cvShowImage("mainWin", img); //将其显示char key = cvWaitKey(20);sprintf(image_name, "%s%s%d%s", dirname,"outImage", i++, ".jpg");//保存的图片名cvSaveImage(image_name, img); //保存一帧图片if (i == NUM_FRAME) break;}cvReleaseCapture(&capture);cvDestroyWindow("mainWin");}void Image_to_video(const char* in,const char* out){int num = 1;CvSize size = cvSize(1024, 768);  //视频帧格式的大小double fps = 30; //每秒钟的帧率CvVideoWriter *writer = cvCreateVideoWriter(out, CV_FOURCC('D', 'I', 'V', 'X'), fps, size); //创建视频文件char cname[100];sprintf(cname,in , num); //加载图片的文件夹,图片的名称编号是1开始1,2,3,4,5.。。。IplImage *src = cvLoadImage(cname);if (!src){return;}IplImage *src_resize = cvCreateImage(size, 8, 3); //创建视频文件格式大小的图片cvNamedWindow("avi");while (src){cvShowImage("avi", src_resize);cvWaitKey(1);cvResize(src, src_resize); //将读取的图片设置为视频格式大小相同cvWriteFrame(writer, src_resize); //保存图片为视频流格式cvReleaseImage(&src); //释放空间num++;sprintf(cname,in, num);src = cvLoadImage(cname);       //循环读取数据}cvReleaseVideoWriter(&writer);cvReleaseImage(&src_resize);}int main(int argc, char *argv[]){char infilename[130] = "C:/Users/jiang/Desktop/output/infile.avi";const char *dirname = "C:/Users/jiang/Desktop/output/tupian/";//Video_to_image(infilename,dirname); //视频转图片const char *outImagename = "C:/Users/jiang/Desktop/output/breakdancer/cam3/3pic (%d).jpg";const char *outVideoname = "C:/Users/jiang/Desktop/output/3outfile.avi";Image_to_video(outImagename,outVideoname ); //图片转视频return 0;}


0 0