如何通过OpenCV制作序列图像的视频



我正在制作一个小型项目,以提取视频帧并将其重新制作到视频中。如何再次将序列图像重新回到视频中?

这是我提取视频帧代码的一部分。

if (n_frame % 3 == 0)
        {
            //Save an image
            sprintf(filename, "frame%.3d.jpg", n_save++);
            imwrite(filename, frame);
            cout << "save: " << filename << endl;
        }

我命名了我的Images Frame000,Frame001,Frame002 ....等。

我正在使用opencv 2.4.11。

非常感谢!

您使用了FFmpegFrameRecorder

string path = emoventer.getExternalStorageDirectory()。getPath() "/video_images";

        File folder = new File(path);
        File[] listOfFiles = folder.listFiles();
        if (listOfFiles.length > 0) {
            iplimage = new opencv_core.IplImage[listOfFiles.length];
            for (int j = 0; j < listOfFiles.length; j++) {
                String files = "";
                if (listOfFiles[j].isFile()) {
                    files = listOfFiles[j].getName();
                    System.out.println(" j " + j + listOfFiles[j]);
                }
                String[] tokens = files.split("\.(?=[^\.]+$)");
                String name = tokens[0];
                iplimage[j] = cvLoadImage(Environment.getExternalStorageDirectory().getPath() + "/Video_images/" + name + ".jpg");
            }    

recorder = new FFMPEGFRAMERECORDER(CONSTN.SS,480,480);

        try {
            recorder.setVideoCodec(13);
            recorder.setFrameRate(0.4d);
            recorder.setPixelFormat(0);
            recorder.setVideoQuality(1.0d);
            recorder.setVideoBitrate(4000);
            startTime = System.currentTimeMillis();
            recorder.start();
            int time = Integer.parseInt(params[0]);
            resp = "Slept for " + time + " milliseconds";
            for (int i = 0; i < iplimage.length; i++) {
                long t = 1000 * (System.currentTimeMillis() - startTime);
                if (t < recorder.getTimestamp()) {
                    t = recorder.getTimestamp() + 1000;
                }
                recorder.setTimestamp(t);
                recorder.record(iplimage[i]);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

您需要VideOwriter -http://docs.opencv.org/trunk/ddd/d9e/classcv_1_1_1videowriter.html

使用所需的文件类型和路径构造它,您就可以使用包含框架的垫子对象使用&lt;&lt;操作员 - 即

auto frame = cv::imread("somePicture.png");
auto writer = cv::VideoWriter("out.avi", VideoWriter::fourcc('M','J','P','G'), 24, frame.size());
writer << frame;
writer.release();

上面的代码将从文件中读取框架,将其馈送到具有24fps和MJPG格式和AVI容器的视频文件中,然后Release()方法将关闭作者。

最新更新