Ich habe ein Video engine2.avi das ich mit openCV lesen und anzeigen möchte. Hier ist mein Code:Ein Video mit openCV lesen
#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);
}
Dieser Code funktioniert nicht, wenn meine Datei den Codec hat YUV 4:2:2 (UYVY)
(I aufgezeichnet das Video Direktshow mit), aber funktioniert, wenn ich ein Video verwende ich Whit OpenCV packte !!
Hat jemand eine Idee, wie das funktionieren könnte?
UPDATE:
Nach ein paar Links zu lesen, was darauf hindeutet, dass Ausnahme abfangen wird das Problem lösen, modifizierte ich meinen Code. Es half nicht, aber hier ist der modifizierte Code:
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;
}
Das Programm stürzt ab, in cap>>frame
. Ich habe ähnliche Fragen gelesen, aber sie verwenden einen Frame in YUV (4: 2: 0), während mein Video UYVY (4: 2: 2) hat. Wie kann ich das in ein RGB-Farbmodell umwandeln?
UPDATE 2:
Nach karlphillip Vorschlag, habe ich OpenCV2.4.3, aber ich habe immer noch den gleichen Fehler mit dem Code unten:
#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;
}
danke @ Karlphilip für Ihre Antwort. Aber in diesen Links erklären sie, wie man einen Frame, der in YUV 4: 2: 2 ist, in RGB konvertiert, ich habe ein Video, wenn ich versuche, einen Frame daraus zu bekommen, das ganze Programm stürzt ab !! – Engine
Lade das Video irgendwo hoch und lass es uns testen. – karlphillip
es ist 1 GB für 10s – Engine