qt — OpenCV C ++ не загружает ЛЮБОЕ видео на Ubuntu 16.04 под VideoCapture

Я установил 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() всегда возвращать ложь. Даже если я попытаюсь проигнорировать это и пойти дальше с Mat, read, imshow и так далее, программа вылетает. Я уже попробовал все, что касается загрузки файла: std::string в качестве аргумента, давая *char, помещая видеофайл в более легкие места, в каталог проекта и ничего не работает. Я пробовал с двумя разными .mp4, с .mov и с файлом cube4.avi, приведенным в папке «samples» (из примеров openCV). Все эти файлы прекрасно воспроизводятся моим VLC. Я уже пробовал в Qt с проектом QtWidgets и с проектом plainCpp. Это никогда не работает. После поиска я обнаружил, что эта ошибка очень повторяется, но я только что нашел решения для Windows, касающиеся добавления файла DLL в проект. Но что мне делать в Ubuntu, поскольку Linux не использует DLL?

0

Решение

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

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

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

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

1

Другие решения

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

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector