有人可以向我解释为什么OpenCV无法使用C ++ API打开.avi文件,而是用C API打开它吗?
以下是两个代码段:
C ++:
Mat source;
VideoCapture stream("Video.avi");
if (!stream.isOpened()){
std::cout << "Stream cannot be opened" << std::endl;
return -1;
}
while(1)
if(!stream.read(source)) {
std::cout << "Error reading video frame" << endl;
}
imshow("Source", source);
无法打开Video.avi,并且一次又一次打印“读取视频帧错误”。 ffmpeg.dll在路径中,我也安装了ffdshow。
C:
CvCapture* stream = cvCreateFileCapture( "Video.avi" );
IplImage* source;
while(1) {
source = cvQueryFrame( stream );
if( !source ) printf("\n Problem");
Mat src(source);
imshow("source", src);
if(waitKey(1) >= 0) break;
}
这会打开Video.avi没有问题。
感谢您的帮助!
PS。也许值得一提的是,Video.avi本身是使用OpenCV创建的。
答案 0 :(得分:0)
您的C和C ++代码不相同。这段代码可以使用:
int main( int argc, char** argv )
{
Mat source;
VideoCapture stream("video.avi");
if (!stream.isOpened())
{
std::cout << "Stream cannot be opened" << std::endl;
return -1;
}
while(1)
{
stream >> source;
if(source.empty())
{
std::cout << "Error reading video frame" << endl;
}
imshow("Source", source);
waitKey(20);
}
stream.release();
getchar();
}