0

我正在尝试在 ubuntu 中使用 opencv c++ 在 avi 文件中播放,但我没有得到任何输出。我使用的代码是我在网上找到的用于播放 avi 视频但我看不到输出的标准代码。是的,视频与我的 src 代码文件夹位于同一目录中。我唯一看到的是,在 while 循环的第一次迭代中,帧是空的,因此会中断。但我不知道为什么会这样,因为视频正在使用 vlc。我真的很感谢这里的一些帮助,因为在过去的 4-5 个小时里我一直坚持下去。#include "cv.h" // 将它包含在使用的主要 OpenCV 函数中。#include "highgui.h" //包含它以使用 GUI 功能。

int main(int argc, char** argv)
{
cvNamedWindow("Example3", CV_WINDOW_AUTOSIZE);

//CvCapture* capture = cvCreateFileCapture("20051210-w50s.flv");
CvCapture* capture = cvCreateFileCapture("tree.avi");
/* if(!capture)
    {
        std::cout <<"Video Not Opened\n";
        return -1;
    }*/
IplImage* frame = NULL;

while(1) {

    frame = cvQueryFrame(capture);
    //std::cout << "Inside loop\n";
    if (!frame)
        break;
    cvShowImage("Example3", frame);
    char c = cvWaitKey(33);
    if (c == 27) break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("Example3");
std::cout << "Hello!";
return 0;
}
4

2 回答 2

0

删除代码行:

char c = cvWaitKey(33);
if (c == 27) break;

而不是这些,只需添加:

cvWaitKey(33);

可能这会有所帮助。这是python代码,对我来说效果很好:

import cv
if __name__ == '__main__':
  capture = cv.CreateFileCapture('Wildlife.avi')
  loop = True
  while(loop):
    frame = cv.QueryFrame(capture)
    if (frame == None):
            break;
    cv.ShowImage('Wild Life', frame)
    char = cv.WaitKey(33)
    if (char != -1):
        if (ord(char) == 27):
            loop = False

或者可能会有所帮助。

于 2014-07-02T09:56:52.687 回答
0

您是在调试模式还是发布模式下运行?在 openCV 2.4.4 中,只有一个 opencv_ffmpeg244.dll(版本 .dll),但没有用于调试的。尝试切换到释放模式。

于 2014-07-02T09:32:40.190 回答