zapisanie sekwencji obrazów z wideo za pomocą opencv2
Pytanie dla nowicjuszy i tak spędziłem dużo czasu przesiewając podobne pytania i odpowiedzi bez szczęścia.
Próbuję zapisywać klatki z pliku wideo w kolejności sekwencyjnej. Udało mi się zapisać jeden obraz za pomocą c, a później nie mogę zapisywać obrazów. Zacząłem używać c ++ w opencv zamiast c i wszystko, co mogę zrobić, to wyświetlić wideo i nie zapisywać z niego żadnych plików jpg.
Używam opencv2.4.4a na mac, jeśli to pomaga. poniżej jest mój przykład
#include <stdio.h>
#include <stdlib.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <iostream>
using namespace cv;
using namespace std;
int main (int argc, char** argv)
{
//initializing capture from file
CvCapture * capture = cvCaptureFromAVI ("/example/example.mov");
//Capturing a frame
IplImage* img = 0;
if(!cvGrabFrame(capture)) //capture a frame
{
printf)Could not grab a fram\n\7");
exit(0);
}
img=cvRerieveFrame(capture); //retrieve the captured frame
//writing an image to a file
if (!cvSaveImage("/frames/test.jpg", img))
printf("Could not save: %s\n","test.jpg");
//free resources
cvReleaseCapture(&capture);
}
Z góry dziękuję
edytuj do powyższego.
Dodałem do powyższego kodu, który powoduje zapisanie obrazu z test.jpg, a następnie zostaje przepisany z następną ramką. Jak mogę powiedzieć opencv, aby nie kopiował ostatniego obrazu i nie zmieniał nazwy następnej ramki na test_2.jpg np. Test_1.jpg, test_2.jpg i tak dalej?
double num_frames = cvGetCaptureProperty (capture, CV_CAP_PROP_FRAME_COUNT);
for (int i = 0; i < (int)num_frames; i++)
{
img = cvQueryFrame(capture);
cvSaveImage("frames/test.jpg", img);
}
cvReleaseCapture(&capture);
}