Opencv videocapture не открывает файл

Обновлено: 05.07.2024

Opencv отлично работает при выполнении других действий. Он может открывать изображения и показывать изображения. Но он не может открыть видео.

Код, который я использую для открытия видео, приведен ниже

Мои vlc и mplayer могут воспроизводить это видео, но opencv не может.

Я установил пакет x264 и libx264-142 кодека. (используя sudo apt-get install )

Моя версия ubuntu - 14.04 trusty .

Я не уверен, что это проблема кодека или нет?

ОТВЕТЫ

Ответ 1

Я преобразовал этот файл mp4 в файл avi с ffmpeg . Тогда приведенный выше opencv-код может хорошо воспроизводить этот файл avi .

Поэтому я уверен, что это проблема кодека.

(Затем я преобразовал этот файл mp4 в другой файл mp4 с помощью ffmpeg , думая, что ffmpeg поможет превратить этот оригинальный нечитаемый .mp4 кодек в читаемый кодек .mp4 , но в результате .mp4 файл оказался сломанным. Этот факт может или не может касаться этой проблемы, просто упомянув, если кому-то нужна эта информация.)

Несмотря на то, что это проблема кодека, я пробовал много других способов, но до сих пор не смог ее решить. Наконец, я попытался восстановить ffmpeg и opencv, тогда проблема была решена!

Ниже приводится моя подробная процедура восстановления.

(1) Build ffmpeg

(2) Build Opencv

Теперь opencv-код должен хорошо воспроизводить файл mp4 !

  • Попробуйте добавить WITH_UNICAP=ON WITH_V4L=ON , когда cmake opencv. Но не работал вообще.
  • Попробуйте изменить кодек внутри кода opencv python. Но тщетно.

cap = cv2.VideoCapture("MOV_0006.mp4")

print cap.get(cv2.cv.CV_CAP_PROP_FOURCC)

Я тестировал это в двух средах. В первом окружении opencv работает, а в другом opencv не воспроизводит видео. Но оба напечатали один и тот же кодек 828601953.0 .

Я попытался изменить свой кодек на cap.set(cv2.cv.CV_CAP_PROP_FOURCC, cv2.cv.CV_FOURCC(*'H264')) , но не работал вообще.

Попытайтесь установить какую-то вещь и кое-какую эту вещь. Но это было совершенно бесполезно.

Я искал в Интернете, и есть много подобных проблем, но у NONE из них было решение!

Ниже приведены проблемы, которые я думаю так же, как и мои.

В этом упоминании о восстановлении ffmpeg ! Но аргументов для меня было недостаточно.

Невозможно открыть видеофайлы ".mp4" с помощью OpenCV 2.4.3, Python 2.7 в машине _Windows 7 - из Переполнение стека

OpenCV 2.4 VideoCapture не работает в Windows - from Переполнение стека

Ответ 2

для ubuntu 14.04, это как я его исправил.

установить зависимости, необходимые для OpenCV

sudo apt-get удалить ffmpeg x264 libx264-dev

Обновление sudo apt-get

sudo apt-get install libgstreamer0.10-0 libgstreamer0.10-dev gstreamer0.10-tools gstreamer0.10-plugins-base libgstreamer-plugins-base0.10-dev gstreamer0.10-plugins-good gstreamer0.10- плагины-уродливые gstreamer0.10-plugins-bad gstreamer0.10-ffmpeg

sudo apt-get -y install libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff4- dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libpencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip

opencv отлично работает при выполнении других задач. Он может открывать изображения и показывать изображения. Но он не может открыть видео.

Код, который я использую для открытия видео, приведен ниже

Моя vlc и mplayer воспроизвести это видео, но OpenCV не может.

Я установил x264 и libx264-142 Пакет кодеков. (используя sudo apt-get install )

Моя версия Ubuntu - 14.04 trusty .

Я не уверен, что это проблема кодека или нет?

2 ответа

Я преобразовал этот mp4 файл в avi файл с ffmpeg . Тогда приведенный выше код opencv может хорошо воспроизвести этот файл avi .

Поэтому я уверен, что это проблема кодека.

(затем я преобразовал этот mp4 файл в другой mp4 файл, используя ffmpeg , думая, что возможно ffmpeg поможет превратить исходный нечитаемый кодек .mp4 в читаемый .mp4 кодека, но полученный файл .mp4 был поврежден. Этот факт может относиться или не относиться к этой проблеме Просто упомяну, на случай, если кому-то понадобится эта информация.)

Несмотря на то, что я знал, что это проблема кодека, я пробовал много других способов, но все еще не мог ее решить. Наконец я попытался пересобрать ffmpeg и opencv, и проблема была решена!

Ниже приведена моя подробная процедура восстановления.

(1) Сборка ffmpeg

(2) Сборка Opencv

Теперь код opencv должен хорошо воспроизводить файл mp4 !

  1. Попробуйте добавить WITH_UNICAP=ON WITH_V4L=ON , когда cmake opencv. Но не работал вообще.
  2. Попробуйте изменить кодек внутри кода Python OpenCV. Но тщетно.

cap = cv2.VideoCapture("MOV_0006.mp4")

print cap.get(cv2.cv.CV_CAP_PROP_FOURCC)

Я проверил это в двух средах. В первой среде opencv работает, а во второй opencv не воспроизводит видео. Но оба распечатали один и тот же кодек 828601953.0 .

Я пытался изменить их кодек с помощью cap.set(cv2.cv.CV_CAP_PROP_FOURCC, cv2.cv.CV_FOURCC(*'H264')) , но не работал вообще.

Попробуйте установить кое-что и кое-что. Но это было совершенно бесполезно.

Я искал в Интернете, и есть много похожих проблем, но ни у одного из них не было решения!

Ниже приведены проблемы, которые я считаю такими же, как и мои.

В этой статье упоминается восстановление ffmpeg ! Но аргументов мне было недостаточно.

Невозможно открыть видеофайлы «.mp4» с помощью OpenCV 2.4.3, Python 2.7 на компьютере _Windows 7 - от Переполнение стека

OpenCV 2.4 VideoCapture не работает в Windows - из Переполнение стека

Я использую привязки Python к OpenCV 2.4, установленному со следующими инструкции.

Моя проблема похожа на эту проблему, но я нужно решение Windows для машины.

Проблема: когда я пытаюсь использовать

Работает нормально, но следующий код

Всегда возвращайте Ложь.

Путь к файлу правильный, абсолютный и без пробелов.

Я пробовал на двух машинах с Windows XP и Windows 7 с похожими результатами. В Linux (Ubuntu) он работает нормально для меня.

Переименование файла opencv_ffmpeg.dll также может быть необходимо.

Для OpenCV версии X.Y.Z
opencv_ffmpeg.dll ==> opencv_ffmpegXYZ.dll

Для 64-битной версии OpenCV X.Y.Z
opencv_ffmpeg.dll ==> opencv_ffmpegXYZ_64.dll

Сначала я использую windows8.1 32bit и opencv 2.4.10.
Я столкнулся с той же проблемой при использовании файла test1.wmv , который был создан Logicool C270.
Я пытался использовать другой файл test2.mov , созданный цифровой камерой (Canon SX160). Поэтому я могу сыграть test2.mov , чтобы добавить путь C:\opencv\build\x86\vc12\bin .
Но я не могу играть test1.wmv.
Поэтому я пытаюсь изменить формат test1.wmv на test1a.mp4 с помощью VLC (на Video for youtube HD ).
Тогда я могу играть test1a.mp4.
Я попробовал test1.wmv на Ubuntu 14.04 LTS, тогда я могу играть легко.
Может возникнуть некоторая разница в бинарном файле ffmpeg по умолчанию между windows8.1 и Ubuntu 14.04 LTS.

Сначала я попытался скопировать, а затем изменил среду Path в Windows. Он не работал, пока я не изменил имя на opencv_ffmpeg245.dll для моей версии openCV 2.4.5 и python 2.7. (уведомление ** 245.dll из opencv версии 2.4.5)

Для анаконды скопируйте opencv_ffmpeg249_64.dll из C: \ Python27 \ переименуйте его версию в соответствии с вашей верной версией opencv и мимо этого C : \ Users \ KHALID \ Anaconda2 \ Library \ Bin

Обновление: это все еще верно для OpenCV 2.4.9, скопируйте все файлы и переименуйте dll в opencv_ffmpeg249.dll

Для 64-разрядных версий переименуйте opencv_ffmpeg_64.dll в opencv_ffmpeg249_64.dll. Измените 249 на вашу версию opencv.

Мне было недостаточно копировать opencv_ffmpeg.dll - мне пришлось переименовать его в opencv_ffmpeg246.dll , когда я использовал OpenCV 2.4.6 с Python 2.7.5

У меня была такая же проблема с python 2.7 и opencv 2.4.10. Я скопировал файл opencv_ffmpeg2410_64.dll из C: \ Applications \ opencv \ build \ x64 \ vc10 \ bin в путь к питону (мой находится в C: \ Users \ mohammad \ Anaconda), и это было решено!

Для OpenCV 3.0.0 в 64-разрядной среде скопируйте opencv_ffmpeg_64.dll и переименуйте его в opencv_ffmpeg300_64.dll.

Также добавьте этот путь в переменную среды PATH, чтобы он работал с OpenCV под Java.

Я сделал точку останова в std::cout<<"cannot read video!\n" и обнаружил, что она каждый раз останавливалась здесь. Так почему же avi-видео не может быть открыто? Спасибо!

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

Я пытаюсь прочитать файл AVI, используя openCV. После получения захвата проблема возникает, когда я даю условие while loop, которое определяет степень выполнения queryFrame. Всего в видео 1251 кадр. Когда я использую while (counter <= number_of_frames) , видео работает нормально, а когда я.

Отсутствующий OpenCV ffmpeg.dll не генерирует никаких предупреждений/ошибок в OpenCV 2.3.1, и код завершается беззвучно. Убедитесь, что на вашем пути есть правильный opencv_ffmpeg*.dll.

1)
Убедитесь, что видеофайл на самом деле находится в той же папке, что и приложение (я предполагаю, что вы уже пробовали это), в противном случае укажите абсолютный путь.

2)
Если вы находитесь на Windows, вам может понадобиться пакет кодеков для чтения видеофайла (например, K-Lite Codec Pack ).

Как предположил Macmade, AVI-это просто контейнер, в котором могут размещаться различные аудио -, видео-или даже закрытые кодеки субтитров. Кроме того, вот FFmpeg сборки Zeranoe для Windows. Вы можете получить дополнительную информацию о содержимом кодека вашего файла, если выполните следующие действия:

Вы должны увидеть вывод, который выглядит следующим образом:

Итак, как вы можете видеть, этот контейнер .mp4 имеет видеокодек H.264 и аудиокодек AAC.

Я пытаюсь открыть файл .avi в opencv. Когда я запускаю код, я не получаю никакой ошибки, но видео не воспроизводится. Я поискал вокруг и думаю, что для этого требуется ffmpeg. Поэтому я установил его с помощью sudo apt-get установить libavformat-dev libavcodec-dev libavfilter-dev libswscale-dev.

Возможно, вы загрузили не тот файл lib. Как и у меня, у меня та же проблема. Но я могу открыть файл AVI в VC6.0, который использует версию opencv 1.0.Finally, я обнаружил, что использую неправильную библиотеку

В режиме отладки, но я использую opencv_core220.lib и opencv_highgui220.lib . И я заменяю их на opencv_core220d.lib и opencv_highgui220d.lib .Now, я могу это прочитать.

В OpenCV 2.4.4 : есть только opencv_ffmpeg244.dll (выпуск dll), а не opencv_ffmpeg244d.dll (отладка dll)

Так что попробуйте в режиме компиляции выпуска !

Я также сталкиваюсь с той же проблемой. С помощью примера кода для VideoCapture моя программа visual studio не смогла открыть ни одного видеофайла. Тогда предложение nimcap работает для меня. "Отсутствующий OpenCV ffmpeg.dll не генерирует никаких предупреждений/ошибок в OpenCV 2.3.1, и код завершается беззвучно. Убедитесь, что на вашем пути есть правильный opencv_ffmpeg*.dll."

Решение: Скопируйте opencv_ffmpeg.dll в папку visual studio project /Debug , я могу открыть практически любой видеофайл с VideoCapture.

В разделе Windows x64 вам не нужно ничего переименовывать. Просто поставьте следующее . \opencv\build\x64\vc12\bin в вашем PATH .

Просто измените свой код с этого:

Я просто добавляю к этому, так как потратил больше времени, чем хотел бы признать. Невозможность открыть файл вызвала массу странных исключений.

Если вы обнаружите, что абсолютные пути работают, в то время как относительные пути не работают, еще одна вещь, которую нужно проверить, - это убедиться, что рабочий каталог установлен правильно.

В Visual Studio это Свойства проекта (Свойства конфигурации) -> Отладка -> Рабочий каталог. Я обнаружил, что мой установлен на "$(ProjectDir)" по умолчанию, когда я действительно хотел "$(OutDir)".

Откройте D:\OpenCV\build\x64\vc14\bin и скопируйте opencv_ffmpeg320.dll или opencv_ffmpeg320_64.dll , которые имеют отношение к вам, основываясь на вашем Windows (x86 or x64) .

opencv_ffmpeg320.dll -> for 32-bit Windows (x86)

opencv_ffmpeg320_64.dll -> for 64-bit Windows (x64)

Вставьте скопированный .dll в C:\Python27\ или в любое место, доступное из переменных среды Windows PATH .

Кроме того, вы можете создать папку D:\OpenCV\vendor\ и добавить файл .dll в эту папку, а затем добавить D:\OpenCV\vendor\ в свой windows environment variables .

Если вы используете Ubuntu 16+, вы можете попробовать это:

Похожие вопросы:

Я уже просмотрел вопрос why can't i open avi in opencv?. Но упомянутое там решение не может решить мою проблему, так как в opencv для java вообще нет opencv_ffmpeg*.dll. Несмотря на то, что я.

Есть ли способ узнать размер avi-видео в OpenCV? Есть некоторые видео, которые являются пустыми, и вместо того, чтобы обрабатывать их, я хочу избавиться от них, сравнив их размер с порогом.

В настоящее время я использую OpenCV, чтобы попытаться открыть файл AVI, созданный с помощью ffdshow. Программе удается открыть видеофайл и воспроизвести его, однако видеофайл черно-белый и слегка.

Я использую opencv для обнаружения миганий. Я смог запустить свой проект с помощью потока, снятого с камеры, и все было в порядке. Я пытался протестировать свой алгоритм на базе данных файлов *.avi.

Я пытаюсь прочитать файл AVI, используя openCV. После получения захвата проблема возникает, когда я даю условие while loop, которое определяет степень выполнения queryFrame. Всего в видео 1251 кадр.

Я пытаюсь открыть файл .avi в opencv. Когда я запускаю код, я не получаю никакой ошибки, но видео не воспроизводится. Я поискал вокруг и думаю, что для этого требуется ffmpeg. Поэтому я установил.

Я пытаюсь играть в avi-файл, используя opencv c++ в ubuntu, но не получаю никакого результата. Код, который я использую, - это стандартный код, который я нашел в интернете и который используется для.

Я пытаюсь открыть видеофайл (.MOV, .AVI или .MP4), используя OpenCV на linux. Так что я могу извлечь определенные кадры в виде изображений на диске и выполнить обработку изображений. Я также.

У меня есть приложение для записи камеры, которое принимает изображение камеры, записывает и сохраняет вывод изображения камеры в виде файла .avi, который я могу воспроизвести и сделать все, что.

Читайте также: