Ho un video engine2.avi che voglio leggere e mostrare con openCV. Ecco il mio codice:Leggere un video con openCV
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
int main(int argc, char** argv)
{
string filename = "D:\\BMDvideos\\engine2.avi";
VideoCapture capture(filename);
Mat frame;
if(!capture.isOpened())
throw "Error when reading steam_avi";
namedWindow("w", 1);
for(; ;)
{
capture >> frame;
//if(!frame)
// break;
imshow("w", frame);
waitKey(20); // waits to display frame
}
waitKey(0);
}
Questo codice non funziona se il file ha il codec YUV 4:2:2 (UYVY)
(ho registrato il video utilizzando Diretto-Show), ma funziona quando uso un video che ho afferrato OpenCV Pentecoste !!
Qualcuno ha un'idea di come potrebbe funzionare?
UPDATE:
Dopo aver letto alcuni link, il che suggerisce che la cattura eccezione risolverà il problema, ho modificato il mio codice. E non ha aiutato, ma qui è il codice modificato:
cv::VideoCapture cap("d:\\BMDvideos\\engine2.avi");
cv::Mat frame;
try
{
cap >> frame;
}
catch(cv::Exception ex)
{
std::cout << ex.what() << std::endl;
}
catch(...)
{
std::cout << "Unknown exception" << std::endl;
}
Il programma si blocca in cap>>frame
. Ho letto domande simili ma usano un frame in YUV (4: 2: 0), mentre il mio video ha UYVY (4: 2: 2). Come posso convertirlo in un modello di colore RGB?
UPDATE 2:
Dopo il suggerimento di karlphillip, ho usato OpenCV2.4.3, ma ho ancora ottenuto lo stesso errore usando il codice seguente:
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\opencv.hpp>
using namespace cv;
using namespace std;
int main(){
cv::Mat frame;
cv::VideoCapture cap("d:\\BMDvideos\\B\\Aufnahme.avi");
if(!cap.isOpened())
{
cout << "Error can't find the file"<<endl;
}
while(1){
if(!cap.read(frame))
imshow("",frame);
cv::waitKey(33);
}
return 0;
}
grazie @karlphilip per la risposta. Ma in quei link ci spiegano come convertire un frame che è in YUV 4: 2: 2 in RGB, ho un video quando provo a ottenere un frame da esso per l'intero crash del programma !! – Engine
Carica il video da qualche parte e facci testarlo. – karlphillip
è 1 GB per 10s – Engine