【问题标题】:VideoWriter not working on Win7-64Bit VMVideoWriter 在 Win7-64Bit VM 上不起作用
【发布时间】:2013-07-10 14:53:02
【问题描述】:

我编写了下面的代码,它试图保存一张图片并数百个,最后使用以下编解码器 MP42(MPEG4-V2) 将它们全部抓取到一个视频中

#include <stdAfx.h>
#include <iostream>
#include <opencv2\opencv.hpp>

using namespace cv;
using namespace std;
int n=0;
char a;
int main(int, char** argv)
{
    Mat image= imread("C:\\Users\\Metin\\Desktop\\images.jpg");
    Mat newimage;
    VideoWriter vide ("Hopdedik.avi",CV_FOURCC('M','P','4','2'),30.0,image.size());
    vide.open("Hopdedik.avi",CV_FOURCC('M','P','4','2'),30.0,image.size()); 
    for(int n=0; n<100;n++){
        cout<<n<<'\n';
        std::string s= to_string(static_cast<long long>(n));
        image.copyTo(newimage);
        putText(newimage,s,Point(100,40),cv::FONT_HERSHEY_COMPLEX,2,cv::COLORMAP_COOL,2,2,false);
        imshow("asd",newimage);     
        if(!vide.isOpened())cout<<"can not opened";     
        vide.write(newimage);
        waitKey(10);        
    }
    vide.release(); 
    return 0;
}

我开始在 Release 模式下调试并将 .exe 文件复制到 Virtualbox Win7-64 位。在我放入必要的 .dll 文件后,exe 可以工作,但代码无法正确创建视频。

我尝试安装以下两个编解码器: http://www.fourcc.org/downloads/angel-potion-mpeg-4--8/ 和 Indeo,即:http://www.afreecodec.com/codec-by-code/iv45-160.html

但它不起作用。

【问题讨论】:

  • 您是否尝试将相同的 opencv_ffmpeg.dll 文件放入文件夹中?
  • 不,威廉!不幸的是它没有工作:(
  • 那么,你可以实际观看imshow()的过程,程序正常退出但你没有视频文件输出?我会在项目中插入一些 opencv 源代码以进行进一步调试。基本上是包含 VideoWriter.open() 实现的文件。
  • 好吧,我在同一目录中有视频输出,但其中没有数据,视频文件的大小为 0 字节。我不明白出了什么问题,我假设编解码器有问题,我可以在我的主机 pc(win7-64 位)上使用数据创建视频输出(清除 win7-64 位系统)你有什么推荐的编解码器吗或者你在这里看到另一个问题?
  • 请回答我的第一个问题。让我换个说法:imshow("asd",newimage); 行是否适用于访客 PC 上的所有 100 帧?

标签: c++ opencv windows-7-x64 codec


【解决方案1】:

曾经我遇到过类似的问题,opencv 无法读取视频。根本没有任何警告。原因是自动字符串生成器导致系统缺少“opencv_mmpeg.dll”。所以,我调试到 cap_ffmpeg.cpp 发现了这个:

#if defined WIN32 || defined _WIN32
    const char* module_name = "opencv_ffmpeg"
        CVAUX_STR(CV_MAJOR_VERSION) CVAUX_STR(CV_MINOR_VERSION) CVAUX_STR(CV_SUBMINOR_VERSION)
    #if (defined _MSC_VER && defined _M_X64) || (defined __GNUC__ && defined __x86_64__)
        "_64"
    #endif
        ".dll";

所以,将 opencv_ffmpeg_64.dll 复制到您的文件夹中,您可能会得到一些结果。否则,您需要深入调试。首先将文件 opencv/modules/highgui/src/cap.cpp (以及需要编译的头文件)插入到您的项目中,以便您可以逐行调试。我想将需要许多其他文件来进一步深入代码。

【讨论】:

  • 好吧,我已经编译了 OpenCV 2.4.5,并且我将 opencv_ffmpeg245.dll 文件复制到了 .exe 文件的目录中,它可以正常工作!非常感谢威廉! :)
  • 非常感谢您提供的信息。将opencv_ffmpeg_64.dll复制到debug/release文件夹,可以解决很多opencv的codec问题。
猜你喜欢
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 2015-05-13
相关资源
最近更新 更多