2013-10-25 2 views
0

Я обмениваюсь с EmguCV на OpenCV, так что я могу попробовать некоторые из функций OpenCV, которые еще не завернуты EmguCV. Однако я не могу загрузить мой простой тестовый видеофайл, который загружается без проблем в EmguCV. Глядя на исходный код EmguCV, я замечаю, что они вызывают функции OpenCV C, а не C++, чтобы инициализировать захват из файла (или веб-камеры), поэтому я написал следующий тестовый код (с помощью this answer). Вот мой простой кодПочему видеофайлы не открываются в OpenCV (оба API C & C++)?

int _tmain() 
{ 
    string filename = "sample.wmv"; 
    if (!FileExists(filename.c_str)) 
    { 
     cout << "File does not exist" << endl; 
     return -1; 
    } 
    else 
    { 
     cout << "File exists" << endl; 
     VideoCapture cap (filename); 
     if(!cap.isOpened()) 
     { 
      cout << "Failed to open file in OpenCV C++" << endl; 
      //Trying C API too just-in-case 
      CvCapture* capture = cvCreateFileCapture(filename.c_str()); 
      if (!capture) 
      { 
       cout << "Failed to open file in OpenCV C" << endl; 
      } 
      else 
      { 
       //Grab frames and do stuff 
       cvReleaseCapture(&capture); 
      } 
      return -1; 
     } 
     else 
     { 
      //Grab frames and do stuff 
     } 
    } 
    return 0; 
} 

Когда я запускаю это я получить выход

File exists 
Failed to open file in OpenCV C++ 
Failed to open file in OpenCV C 

Это происходит независимо от файла, т.е. это происходит на «sample.wmv», «sample.avi», и даже один из файлов образцов OpenCV «tree.avi».

Почему? Что происходит?

(Я бегу OpenCV 2.4.6 на Windows 8 и машины для Windows 8.1.)

+0

У вас есть необходимые разрешения для вашей системы? Можете ли вы открыть что-нибудь (например, изображения или файлы XML и т. Д.) С помощью opencv? – alrikai

+0

Yep - jpeg открывается отлично. Кроме того, проекты EmguCV успешно открывают одни и те же видеофайлы. – dumbledad

+0

У вас есть образцы? Я могу попробовать это для вас, а затем я дам вам знать, хорошо ли это работает. – Mzk

ответ

3

Похоже, что, следуя советам @ tobias-senst на another answer, мне нужно было создать OpenCV на моей локальной машине, а не полагаться на библиотеки DLL, которые снабжены стандартным дистрибутивом. Головная боль заставляла OpenCV строить локально (см. here, here и here), но теперь, когда я ссылаюсь на копию OpenCV 2.4.6, которая была построена на этом компьютере, я могу открыть видеофайлы.

Я понятия не имею, почему это работает, почему он не упоминается в требованиях, почему другие чаще не имеют этой проблемы, и что не удается при развертывании по умолчанию, но по крайней мере я исправил это.

1

umm..if emgu и ваш проект использовать ту же версию, просто скопировать OpenCV библиотеки DLL в emgu (и все другие dll) в вашу папку. Возможно, это сработает.

одна причина, почему это возможно, потому что opencv не построен с ffmpeg (or you are missing them in your folder, just copy them over then it also might start to work). opencv полагается на ffmpeg, чтобы сделать почти все декодирование. opencv ffmpeg/s, вероятно, построены в режиме выпуска, поэтому, если ваш проект находится в режиме отладки, он, вероятно, тоже не работает.

+0

Спасибо @ zaw-lin Переключение на DLL OpenCV, которые поставляются с EmguCV, является хорошей идеей, но по мере того, как я обмениваюсь с EmguCV на OpenCV, я бы хотел использовать последнюю версию или, по крайней мере, понять, почему я не могу. Я думаю, что вы можете быть прав в DLL-файлах ffmpeg, хотя я уже копировал их (отлаживать и выпускать) в каталог. Я понял, что мне нужно создать библиотеки DLL (или возможно только один ffmpeg?) Локально и [исправил это] (http://stackoverflow.com/a/19635301/575530). – dumbledad

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