#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
- Загрузите OpenCV (если вы еще этого не сделали), распакуйте и установите его, следуя официальному руководству по установке Linux: http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_install/linux_install.html#linux-installation
Ответ №2:
Я решаю проблему, устанавливая «opencv3.2.0-dev» вместо «opencv3.2.0»;
для установки OPENCV недостаточно установить opencv-python.