OpenCV C не загружает видео в Ubuntu 16.04 в разделе VideoCapture

#c #qt #opencv #ubuntu

#c #qt #opencv #ubuntu

Вопрос:

Я установил OpenCV 2.4.13 после установки необходимых зависимостей и запускаю его с помощью Qt Creator 5.7 для программирования на C . Следуя некоторым руководствам, мне удалось загрузить неподвижные изображения, обработать их и так далее. Но когда я пытаюсь использовать cv ::VideoCapture, например:

 cv::VideoCapture cap;
cap.open("<File location/file name>");
  

или:

 cv::VideoCapture("<File location/file name");
  

cap.isOpened() всегда возвращайте false. Даже если я попытаюсь проигнорировать это и продолжить работу с Mat, read, imshow и так далее, программа вылетает. Я уже перепробовал все, что касается загрузки файла: предоставление a std::string в качестве аргумента, предоставление a *char , размещение видеофайла в более удобных местах, в каталоге проекта, и ничего не работает. Я попробовал использовать два разных файла .mp4, с файлом .mov и с файлом cube4.avi, указанным в папке «samples» (из примеров OpenCV). Все эти файлы отлично воспроизводятся моим VLC. Я уже пробовал в Qt с проектом QtWidgets и с проектом plainCpp. Это никогда не работает. После поиска по этому поводу я увидел, что эта ошибка очень часто встречается, но я только что нашел решения для Windows, касающиеся добавления a .файл dll в проект. Но что мне делать в Ubuntu, поскольку Linux не использует библиотеки DLL?

Ответ №1:

Я выяснил, как это решить, и я здесь, чтобы поделиться со всеми, кто сталкивается с подобными проблемами. Прежде всего, моя установка FFmpeg по какой-либо неизвестной причине была проигнорирована при компиляции OpenCV. Поскольку для чтения и записи видео необходим FFmpeg, OpenCV не смог выполнить эти задания и не отобразил никаких сообщений об ошибках или предупреждений об этом. В любом случае я решил попробовать все заново с самого начала. Имейте в виду: если вы просто переустановите FFmpeg, это не решит ваши проблемы; после этого вам нужно выполнить cmake , скомпилировать и установить OpenCV снова. Я загрузил самую последнюю версию FFmpeg из репозитория, скомпилировал и установил ее снова. Я попытался снова скомпилировать OpenCV, но он всегда зависал примерно на 15% при обработке файла FFmpeg (Libav) .h с сообщением:

 <file_name.h> can not be used when making a shared object; recompile with -fPIC
  

Итак, я искал его и с некоторыми усилиями обнаружил, что необходимо скомпилировать FFmpeg со следующей строкой configure, прежде чем выполнять make :

 .configure --enable-pic --enable-shared
  

Некоторые руководства по установке ffmpeg включают еще больше команд после «configure». Затем я скомпилировал и переустановил FFmpeg, а также скомпилировал и переустановил OpenCV. После этого я смог загрузить видео (значение cap.isOpened() больше не было false), но, тем не менее, я получал следующую ошибку для любого видео, и они не считывались:

 Assertion desc failed at libswscale/swscale_internal.h:674
  

Способ, который я нашел для решения этой проблемы, заключался в загрузке новейшей стабильной версии FFmpeg вместо самой новой, ее повторной компиляции, повторной компиляции OpenCV, и затем это было успешно! Теперь я могу как загружать, так и записывать видеофайлы (я еще не тестировал его с несколькими кодеками). Интересно, почему они не запускают предварительно скомпилированные версии OpenCV со всем, чтобы нам не приходилось иметь дело со всеми этими материалами…

Подводя итог всему:

  • Загрузите последнюю стабильную версию FFmpeg. Если это не сработает, попробуйте более старую версию. (Я использую 2.8.6, последнюю стабильную версию прямо сейчас).
  • Распакуйте его, откройте терминал из папки ffmpeg, скомпилируйте и установите его, набрав:

.configure --enable-pic --enable-shared

make

sudo make install

Ответ №2:

Я решаю проблему, устанавливая «opencv3.2.0-dev» вместо «opencv3.2.0»;
для установки OPENCV недостаточно установить opencv-python.