我写了这些代码:
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace std;
int main()
{
cv::namedWindow( "Example 2-3", cv::WINDOW_AUTOSIZE );
cv::VideoCapture cap;
cap.open("/Testing/test.avi");
if(cap.isOpened()==0)
{
cout<<"The video file cannot be opened."<<endl;
return -1;
}
cv::Mat frame;
cap >> frame;
std::cout<<frame.empty()<<std::endl; // I have a problem here: Why the result is 1?
for(;;)
{
cap >> frame;
if( frame.empty() ) break; // Ran out of film
cv::imshow( "Example 2-3", frame );
if( (char)cv::waitKey(33) >= 0 ) break;
}
return 0;
}
我试图逐帧显示视频,当我通过cap.open
打开视频时,它已成功打开,但当程序执行代码std::cout<<frame.empty()<<std::endl;
时,它应该为0 ,因为视频成功打开,所以帧不应该为空,但结果是1,这意味着帧是空的,所以视频无法显示,为什么?你有任何解决方案吗?
答案 0 :(得分:1)
在这种情况下,据我所知,您应该检查您的视频文件。另外,尝试调试以查看打开文件后cap
包含的内容,例如帧数或fps等。
成功打开您的视频文件并不意味着您的文件是好的。有时您的视频文件已损坏(下载或解码时等)会导致某些帧可能为空。
尝试其他视频文件,检查结果是否不同。