Я работаю над обработкой изображений (OpenCC 3.0, C++).Запись видео определенного времени с использованием OpenCV в C++
На самом деле, что я пытаюсь сделать, это:
- Запись видео в 1 минуту (это мой вопрос)
- После записи видео, чтение записанного видео (я сделаю этот шаг после первого шага решается)
- Необходимый процесс обработки изображения (я уже сделал этот шаг)
- Вернитесь в состояние 1 и выполните тот же процесс, пока не дойдете до конечного порядка.
У меня есть код для state 1
. (Этот код записывает видео и записывает файл до нажатия клавиши ESC.)
Не могли бы вы помочь мне, как я могу записывать видео в течение 1 минуты или 10 минут или в любое конкретное время?
Я хочу записывать видео в течение 1 минуты.
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main() {
VideoCapture vcap(0);
if (!vcap.isOpened()) {
cout << "Error opening video stream or file" << endl;
return -1;
}
int frame_width = vcap.get(CV_CAP_PROP_FRAME_WIDTH);
int frame_height = vcap.get(CV_CAP_PROP_FRAME_HEIGHT);
VideoWriter video("/MyVideo.avi", CV_FOURCC('M', 'J', 'P', 'G'), 10, Size(frame_width, frame_height), true);
for (;;) {
Mat frame;
vcap >> frame;
video.write(frame);
imshow("Frame", frame);
char c = (char)waitKey(33);
if (c == 27) break;
}
return 0;
}`
Это работает.
Вот мой код. Я пытался получить 10 секунд видео в моем последнем коде, но я получил 16 секунд видео. Можете ли вы объяснить, почему это так?
#include "opencv2/opencv.hpp"
#include <iostream>
#include <ctime>
#include <cstdio>
#include <time.h>
#include <stdio.h>
using namespace std;
using namespace cv;
int main() {
//////////////////// Added Part
time_t start, end;
//////////////////// Added Part
VideoCapture vcap(0);
if (!vcap.isOpened()) {
cout << "Error opening video stream or file" << endl;
return -1;
}
int frame_width = vcap.get(CV_CAP_PROP_FRAME_WIDTH);
int frame_height = vcap.get(CV_CAP_PROP_FRAME_HEIGHT);
VideoWriter video("C:\\Users\\lenovo\\Desktop\\OpenCV Webcam Video Record With R Key\\WebcamRecorder\\WebcamRecorder\\data\\MyVideo.avi", CV_FOURCC('M', 'J', 'P', 'G'), 10, Size(frame_width, frame_height), true);
//////////////////// Added Part
time(&start);
//////////////////// Added Part
for (;;) {
Mat frame;
vcap >> frame;
video.write(frame);
imshow("Frame", frame);
char c = (char)waitKey(33);
if (c == 27) break;
//////////////////// Added Part
time(&end);
double dif = difftime(end, start);
printf("Elasped time is %.2lf seconds.", dif);
if (dif==10)
{
std::cout << "DONE" << dif<< std::endl;
break;
}
//////////////////// Added Part
}
return 0;
}
Это не очень понятно, что вы просите.Можете ли вы изменить свой вопрос, чтобы сделать его более понятным? –
Я редактировал моего друга. Надеюсь, теперь вы можете понять. –