Я пытался записать определенную продолжительность видео в режиме обнаружения острых краев с веб-камеры.
В коде нет ошибки, но я не смог получить видео с обнаруженным краем, так как видеопроигрыватель показывает «не удается отобразить файл».
Код генерирует нормальное, читаемое видео, когда я не применял обнаружение края (дополнительные четыре строки в коде ниже)
Я новичок в этом, поэтому мне нужен гид, если я делаю какую-то глупую ошибку. Если этот метод не работает, есть ли альтернативный способ, который может помочь?
В конце я просто хочу обработать несколько последовательных изображений с обнаружением краев.
Код:
#include "stdafx.h"#include "opencv2/opencv.hpp"#include "opencv2/objdetect/objdetect.hpp"#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <stdio.h>
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace cv;
using namespace std;
int ex = 1734701162;
//Mat frame, edges;
string output = "C:/Users/Dell/Desktop/New folder/edges.mov";
int main(int argc, const char** argv)
{
VideoCapture cap(0);
int i_fps = 30;
time_t start = time(0);
// VideoWriter (const String &filename, int fourcc, double fps, Size frameSize, bool isColor=true)
VideoWriter outputVideo(output, ex, i_fps, Size(640, 480), true);
if (!cap.isOpened()) {
cout << "Not opened" << endl; // check if it's succeeded
return -1;
}
while (1) {
Mat frame, gray, edges, draw;
cap >> frame;
//extra 4 lines added for edge detection
cvtColor(frame, gray, COLOR_BGR2GRAY);
//GaussianBlur(edges, edges, Size(7, 7), 1.5, 1.5);
Canny(gray, edges, 50, 150, 3);
outputVideo << edges;
//outputVideo << frame;
if (difftime(time(0), start) >= 10) break;
if (waitKey(30) >= 0) break;
}
outputVideo.release();
cap.release();
//return 0;
}
Задача ещё не решена.
Других решений пока нет …