Я установил 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?
Я понял, как решить эту проблему, и я здесь, чтобы поделиться со всеми, кто сталкивается с подобными проблемами. Прежде всего, моя установка 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 со всем, чтобы нам не приходилось иметь дело со всеми этими вещами …
Подводя итог всему:
.\configure --enable-pic --enable-shared
make
sudo make install
Я решаю проблему путем установки «opencv3.2.0-dev» вместо «opencv3.2.0»;
pip install opencv-python недостаточно для установки OPENCV.