2013-07-10 3 views
1

Я закодирован ниже которой пытается удержать картину и подсчитать число сто и, наконец, захватить все их видео с последующей кодек MP42 (MPEG4-V2)VideoWriter не работает на Win7-64Bit VM

#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; 
} 

I начал отладку в режиме выпуска и скопировал файлы .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

Но это не сработало.

+0

Вы пытались поместить тот же файл opencv_ffmpeg.dll в папку? – William

+0

Нет, Уильям! К сожалению, это не сработало :( – metoinside

+0

Итак, вы можете наблюдать процесс, идущий с imshow(), программа выходит нормально, но у вас нет выходного видеофайла? Я бы ввел в проект некоторый исходный код opencv для дальнейшей отладки В основном файл, содержащий реализацию VideoWriter.open(). – William

ответ

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 (и заголовки должны быть скомпилированы), чтобы вы могли отлаживать строки за строкой. Я полагаю, что многие другие файлы понадобятся, чтобы пойти дальше в код.

+0

Ну, я уже скомпилировал OpenCV 2.4.5, и я скопировал файл opencv_ffmpeg245.dll в каталог .exe-файла, и он работает правильно! Большое спасибо Уильяму! :) – metoinside

+0

Большое вам спасибо за информацию. Копирование файла opencv_ffmpeg_64.dll в папки debug/release позволит решить множество проблем с кодеками, которые имеют opencv. – user2565010

Смежные вопросы