1

我编写了下面的代码,它试图保存一张图片并数百个,最后用下面的编解码器 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;
}

我开始在发布模式下调试并将 .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

但它没有用。

4

1 回答 1

2

一旦我遇到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 (以及需要编译的头文件)插入到您的项目中,以便您可以逐行调试。我想需要许多其他文件才能进一步深入代码。

于 2013-07-11T10:59:44.503 回答