5、【opencv入门】批量图区图片、视频分解、视频合成

一、批量有序读取图片

【示例】

 1 //批量有序读取图片
 2 #include <opencv2/opencv.hpp>
 3 #include <iostream>
 4 #include <stdio.h>
 5 
 6 using namespace std;
 7 using namespace cv;
 8 
 9 int main()
10 {
11     //批量读取图片(有序)
12     char filename[50];
13     char winName[50];
14     Mat srcImg;
15     for (int i = 1; i < 100; i++)
16     {
17         sprintf(filename,"%d.bmp",i);
18         sprintf(winName,"NO--%d",i);
19         srcImg=imread(filename);
20         if (srcImg.empty())
21             break;
22         imshow(winName,srcImg);
23     }
24     waitKey(0);
25     destroyAllWindows();
26     return 0;
27 }

二、视频分解成图片

【示例】

//视频分解成图片
#include <opencv2/opencv.hpp>
#include <stdio.h>

using namespace cv;

int main()
{
    Mat frame;
    char outfile[50];
    VideoCapture cap("../../1.mp4");
    if (!cap.isOpened())//打开失败
        return -1;
    int totalFrame=cap.get(CV_CAP_PROP_FRAME_COUNT);//获取视频总帧数
    for (int i = 1; i <=totalFrame; i++)
    {
        cap>>frame;
        if (frame.empty())
            break;
        sprintf(outfile,"%d.bmp",i);
        imwrite(outfile,frame);
        imshow("video",frame);
        waitKey(15);
    }
    cap.release();
    destroyAllWindows();
    return 0;
}

 

三、图片合成视频

【示例】

 1 //图片合成视频
 2 #include<opencv2/opencv.hpp>
 3 #include<iostream>
 4 #include<stdio.h>
 5 
 6 using namespace cv;
 7 using namespace std;
 8 
 9 int main()
10 {
11     VideoWriter writer("out.avi",CV_FOURCC('X','V','I','D'),20,Size(544,960),true);//Size要和图片尺寸保持一致
12     char filename[50];
13     Mat frame;
14     for (int i = 1; i < 301; i++)
15     {
16         sprintf(filename,"%d.bmp",i);
17         frame=imread(filename);
18         if(frame.empty())   break;
19         writer<<frame;
20     }
21     cout<<"write end!"<<endl;
22     destroyAllWindows();
23 
24     return 0;
25 }

 

猜你喜欢

转载自www.cnblogs.com/Long-w/p/9661269.html
今日推荐