zoukankan      html  css  js  c++  java
  • opencv图片转幻灯片视频

     1 /*g++ *.cpp `pkg-config --cflags --libs opencv` -std=c++11*/
     2 
     3 #include <opencv2/opencv.hpp>  
     4 using namespace std;  
     5 using namespace cv;  
     6 #define NUM_FRAME 300  
     7 #define SIZE 7  
     8   
     9 char path[100];//输入文件路径  
    10   
    11 //将图片序列转换为视频  
    12 void getVideo()  
    13 {  
    14     int i = 0;  
    15     IplImage* img = 0;//读入图像  
    16     IplImage* outimg = 0;//修改图像尺寸  
    17     char image_name[100];//图像名字  
    18     char videoname[100];  
    19     strcpy(videoname, path);  
    20     strcat(videoname, "//1.avi");  
    21       
    22     //初始化视频编写器,参数根据实际视频文件修改  
    23     CvVideoWriter *writer = 0;  
    24     //从文件读入视频  
    25     CvCapture* capture = cvCaptureFromAVI(videoname);  
    26     //读取和显示  
    27     int isColor = 1;  
    28     IplImage* frameimg;//从视频中提取的帧图像  
    29     int fps = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);//视频的fps  
    30     int frameH = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);//视频的高度  
    31     int frameW = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);//视频的宽度  
    32     writer = cvCreateVideoWriter("..//output//2.avi",-1, fps, cvSize(frameW, frameH), isColor);//创建视频写入  
    33     printf("	video height : %d
    	video width : %d
    	fps : %d
    ", frameH, frameW, fps);  
    34     //创建窗口  
    35     cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);  
    36     //读入图片,并制作幻灯片  
    37     while (i<SIZE)  
    38     {  
    39         CvSize Out_Img_size;//图片的大小  
    40         Out_Img_size.width = frameW;//使读入图片的大小与视频尺寸相同  
    41         Out_Img_size.height = frameH;  
    42         sprintf(image_name, "%d%s", ++i, ".jpg");//得到图片名字  
    43         char imgname[100];  
    44         strcpy(imgname, path);  
    45         strcat(imgname, "//");  
    46         strcat(imgname,image_name);//加上路径  
    47         img = cvLoadImage(imgname);//打开图片  
    48         outimg = cvCreateImage(Out_Img_size, img->depth, img->nChannels);//创建一张与视频帧大小相同的图像  
    49         cvResize(img, outimg, CV_INTER_LINEAR);//让打开的图像重写为指定大小  
    50         if (!img)  
    51         {  
    52             printf("Could not load image file...
    ");  
    53             exit(0);  
    54         }  
    55         //设置字体  
    56         CvFont font;  
    57         cvInitFont(&font, CV_FONT_VECTOR0, 0.5f, 0.5f, 0, 1, 8);  
    58         //在图像中显示文本字符串  
    59         cvPutText(outimg, "StudentID", cvPoint(frameW - 100, frameH - 60), &font, CV_RGB(255, 255, 255));  
    60         cvPutText(outimg, "name", cvPoint(frameW - 100, frameH - 30), &font, CV_RGB(255, 255, 255));  
    61         char key = cvWaitKey(20);//等待  
    62         //将图像写入视频,重复25次是为了使之放映速度变慢  
    63         for (int j = 0; j < 25; j++) {  
    64             cvShowImage("mainWin", outimg);  
    65             cvWriteFrame(writer, outimg);  
    66         }  
    67     }  
    68     i = 0;  
    69     while (1)  
    70     {  
    71         frameimg = cvQueryFrame(capture); //获取一帧图片  
    72         if (!frameimg)break;//读到尽头,退出  
    73         //设置字体  
    74         CvFont font;  
    75         cvInitFont(&font, CV_FONT_VECTOR0, 0.5f,0.5f , 0, 1, 8);  
    76         //在图像中显示文本字符串  
    77         cvPutText(frameimg, "StudentID", cvPoint(frameW - 100, frameH - 60), &font, CV_RGB(255, 255, 255));  
    78         cvPutText(frameimg, "name", cvPoint(frameW - 100, frameH - 30), &font, CV_RGB(255, 255, 255));  
    79         cvShowImage("mainWin", frameimg);  
    80         char key = cvWaitKey(20);  
    81         //将视频帧写入视频  
    82         cvWriteFrame(writer, frameimg);  
    83     }  
    84     cvReleaseVideoWriter(&writer);  
    85     cvDestroyWindow("mainWin");  
    86 }  
    87   
    88 int main(int argc, char** argv)  
    89 {  
    90     strcpy(path, argv[1]);  
    91     getVideo();  
    92     waitKey();  
    93     system("pause");  
    94     return 0;  
    95 }
    View Code
  • 相关阅读:
    【C++基础】重载,覆盖,隐藏
    【Lintcode】003.Digit Counts
    【C++ Primer 5th】Chapter 15
    【Lintcode】120.Word Ladder
    牛客网上的题
    二叉树中和为某个值得路径
    数据库
    二叉搜索树的后序遍历序列
    从上往下打印二叉树
    二叉树的镜像
  • 原文地址:https://www.cnblogs.com/dirge/p/8413279.html
Copyright © 2011-2022 走看看