【问题标题】:OpenCV's cvWriteFrame(..) does nothingOpenCV cv WriteFrame(..) 什么都不做
【发布时间】:2013-01-05 10:54:01
【问题描述】:

我花了几个小时尝试用CvVideoWriter 编写一个 avi 文件。我总是得到一个大小为 5.54KB 且没有帧的文件。我检查了CvVideoWriter 是否不为空,也不是。我还尝试使用cvShowImage 显示我的IplImage,它显示正确。我尝试了多种编解码器(DIVX、H264、..)。

我发现当 VideoWriter 定义如下时,该函数将帧保存在 jpg 文件中:

CvVideoWriter* recorder = cvCreateVideoWriter("test0001.jpg", CV_FOURCC('I', 'Y', 'U', 'V'), -1, Size(w,h), true);

这是我的程序:

IplImage* myIplFrame=...;
CvVideoWriter* recorder = cvCreateVideoWriter("test.avi", CV_FOURCC('I', 'Y', 'U', 'V'), 10, Size(w,h), true);

cvShowImage("test",myIplFrame); //showing image properly
cvWriteFrame(recorder, myIplFrame);
cvWaitKey(500); //not helping

cvReleaseVideoWriter(&recorder);

我做错了什么?

【问题讨论】:

    标签: c++ qt video opencv


    【解决方案1】:

    应内置 IYUV 编解码器,以便 videowriter 始终可以创建这种类型的文件。

    你可以创建一个文件,所以权限是正确的。

    您是否有充分的理由使用旧的 iplimage 而不是 cv 标准格式?
    这是我要检查的第一件事。

    http://docs.opencv.org/

    ps。如果您不显示图像,则不需要 waitkey()。

    【讨论】:

    • 我刚刚发现我必须用 MinGW 重新编译 OpenCV 并使用那里的库。我还使用了更新的格式,如 cv::Mat 和更新的函数,它现在正在工作(刚刚弄清楚):)
    • @LightnessRacesinOrbit- 这是一组关于接下来要尝试什么的建议,对于遇到同样问题的人也很有用
    【解决方案2】:

    我在 SO 上找到了另一个类似的线程,有人提到你应该用 MinGW 而不是 VS 编译。我这样做了,并在 .pro 文件(Qt)中包含了新的库和包含这样的路径:

    INCLUDEPATH += C:\OpenCV-2.3.1\mingwBuild\install\include
    
    LIBS += -LC:\\OpenCV-2.3.1\\opencv\\build\\x86\\mingw\\lib \
        -lopencv_core231 \
        -lopencv_highgui231
    

    注意我是如何使用opencv 文件夹中的库的;例如,在您使用 CMake 配置和生成它之后,这是包含源的文件夹。

    另一个提示你,读者,有同样的问题是如果 cv::Mat 没有被识别或者你得到一些奇怪的错误 - simpleFree 函数未定义(或类似的东西,可以'不记得了)例如

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 2016-12-24
      • 2017-04-18
      • 2011-08-03
      • 2014-05-11
      • 2014-09-10
      相关资源
      最近更新 更多