我有一个视频engine2.avi我想阅读并用openCV显示。这里是我的代码:如果我的文件有编解码器YUV 4:2:2 (UYVY)
(我使用直接显示录制的视频)用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);
}
此代码不能正常工作,但是当我使用的视频我抓住丝毫的OpenCV的作品!
有没有人有一个想法这可以如何工作?
UPDATE:
读了一些链接,提示醒目异常将解决这个问题后,我修改了代码。它并没有帮助,但这里是修改后的代码:
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;
}
程序崩溃的cap>>frame
。我回答了类似的问题,但他们在YUV(4:2:0)中使用了帧,而我的视频具有UYVY(4:2:2)。我怎样才能将其转换成RGB颜色模型?
更新2:
karlphillip的建议后,我用OpenCV2.4.3,但我仍然使用下面的代码得到了同样的错误:
#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;
}
感谢@karlphilip为您解答。但在这些链接中,他们解释了如何将YUV 4:2:2中的帧转换为RGB,当我试图从整个程序崩溃时获取帧时,我有一个视频! – Engine 2013-02-13 10:25:30
上传视频的地方,让我们测试它。 – karlphillip 2013-02-13 12:31:28
它是10 GB的1 GB – Engine 2013-02-13 13:02:42