Tôi có video engine2.avi mà tôi muốn đọc và hiển thị với openCV. Dưới đây là mã của tôi:Đọc video với 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);
}
Mã này không hoạt động nếu tập tin của tôi có các codec YUV 4:2:2 (UYVY)
(tôi ghi lại các video sử dụng trực tiếp Show), nhưng hoạt động khi tôi sử dụng một đoạn video tôi nắm lấy OpenCV whit !!
Có ai là ý tưởng về cách thức hoạt động của tính năng này không?
UPDATE:
Sau khi đọc một số liên kết, cho thấy bắt ngoại lệ sẽ giải quyết được vấn đề, tôi sửa đổi mã của tôi. Nó không hữu ích, nhưng đây là mã đã sửa đổi:
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;
}
Chương trình bị treo trong cap>>frame
. Tôi đã đọc các câu hỏi tương tự nhưng họ sử dụng khung trong YUV (4: 2: 0), trong khi video của tôi có UYVY (4: 2: 2). Làm thế nào tôi có thể chuyển đổi điều này thành mô hình màu RGB?
UPDATE 2:
Sau gợi ý karlphillip, tôi sử dụng OpenCV2.4.3, nhưng tôi vẫn có những lỗi tương tự bằng cách sử dụng mã bên dưới:
#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;
}
cảm ơn @karlphilip cho câu trả lời của bạn. Nhưng trong những liên kết đó, họ giải thích cách chuyển đổi một khung hình trong YUV 4: 2: 2 thành RGB, tôi có một video khi tôi cố gắng lấy một khung hình từ đó toàn bộ chương trình bị lỗi !! – Engine
Tải video lên một nơi nào đó và để chúng tôi thử nghiệm. – karlphillip
1 GB cho 10s – Engine