123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- #include "videomanger.h"
- #include <QImage>
- #include <QList>
- #include <QString>
- #include <random>
- VideoManger::VideoManger(QObject *parent/* = nullptr*/) : QObject(parent),
- framesPerSecound(25)
- {
- }
- bool VideoManger::makeVideo(/*QList<QImage> *frames, */QString outputName, int count)
- {
- // if(frames->isEmpty())
- // return false;
- if(outputName.isEmpty()){
- srand(time(nullptr));
- outputName = QString(QString::number(rand() % 200 + 10));
- }
- // counts the size of one frame
- frameSize = cv::imread(outputName.toStdString() + std::to_string(1) + ".png").size();
- // init videoWriter
- videoWriter = cv::VideoWriter(outputName.toStdString() + "1.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'),
- framesPerSecound, frameSize, true);
- // record frames in a video file
- for(int i = 0; i < count; ++i){
- // frame = QImageToCvMat(frames->at(i), CV_8UC3);
- // cv::imshow("qwe", frame);
- frame = cv::imread(outputName.toStdString() + std::to_string(i + 1) + ".png");
- videoWriter.write(frame);
- }
- emit videoSaved();
- return true;
- }
- // convert QImage to cv;;mat
- cv::Mat VideoManger::QImageToCvMat(QImage frame, int format)
- {
- return cv::Mat(frame.height(), frame.width(), format,
- const_cast<uchar*>(frame.bits()),
- frame.bytesPerLine()).clone();
- }
|