Почему я не могу открыть avi-видео в openCV?
Я просто написал простой пример чтения видео с openCV2.3.1, но, похоже, я не могу открыть avi-видео в любом случае 🙁
VideoCapture capture("guitarplaying.avi"); if(!capture.isOpened()){ std::cout<=0) break; } capture.release();
Я сделал точку останова в std::cout<<"cannot read video!\n"
и обнаружил, что он останавливается здесь каждый раз. Итак, почему AVI-видео невозможно открыть? Благодаря!
- Какая лучшая библиотека обработки изображений java?
- Что я должен знать о Structured Exceptions (SEH) в C ++?
- Как я могу поймать 404?
- Определяется тип исключения после исключения?
- В чем разница между модулями многопоточности и многопроцессорности?
- Как масштабировать BufferedImage
- Радиус многоканального изображения в RGB
- Пакетный файл. Удалить все файлы и папки в каталоге
- Должен ли я наследовать от std :: exception?
- вращающиеся растровые изображения. В коде
- Показывать номер строки в обработке исключений
- Как управлять изображениями на уровне пикселей в C #
- Действительное использование goto для управления ошибками в C?
1)
Убедитесь, что видеофайл находится в той же папке, что и приложение (я предполагаю, что вы уже пробовали это), иначе укажите абсолютный путь.
2)
Если вы работаете в Windows, вам может потребоваться пакет кодеков для чтения видеофайла (например, K-Lite Codec Pack ).
Как предположил Макмад, AVI – это просто контейнер, в котором могут размещаться разные аудио, видео или даже закрытые кодеки. Кроме того, здесь создаются сборки FFmpeg от Zeranoe для Windows. Вы можете получить дополнительную информацию о содержимом кодека вашего файла, если выполните следующие действия:
ffmpeg -i guitarplaying.avi
Вы должны увидеть результат, который выглядит следующим образом:
ffmpeg version 0.8.7.git, Copyright (c) 2000-2011 the FFmpeg developers built on Dec 6 2011 09:20:43 with gcc 4.6.1 configuration: --pkg-config=pkg-config --enable-gpl --enable-version3 --enable -nonfree --enable-runtime-cpudetect --enable-memalign-hack --enable-postproc --a rch=x86 --target-os=mingw32 --cross-prefix=i686-w64-mingw32- --prefix=/home/wluc as/ffmpeg-cross/build/deploy --enable-libx264 --enable-libvpx --enable-zlib --en able-bzlib --enable-libxvid --enable-libfaac --enable-libmp3lame --enable-libvor bis --enable-libtheora --enable-libopenjpeg --enable-libfreetype libavutil 51. 30. 0 / 51. 30. 0 libavcodec 53. 40. 0 / 53. 40. 0 libavformat 53. 24. 0 / 53. 24. 0 libavdevice 53. 4. 0 / 53. 4. 0 libavfilter 2. 51. 0 / 2. 51. 0 libswscale 2. 1. 0 / 2. 1. 0 libpostproc 51. 2. 0 / 51. 2. 0 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '..\..\Videos\Sintel\sintel_trailer-720p .mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 creation_time : 1970-01-01 00:00:00 title : Sintel Trailer artist : Durian Open Movie Team encoder : Lavf52.62.0 copyright : (c) copyright Blender Foundation | durian.blender.org description : Trailer for the Sintel open movie project Duration: 00:00:52.20, start: 0.000000, bitrate: 1165 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 1033 kb/s, 24 fps, 24 tbr, 24 tbn, 48 tbc Metadata: creation_time : 1970-01-01 00:00:00 handler_name : VideoHandler Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, s16, 126 kb/s Metadata: creation_time : 1970-01-01 00:00:00 handler_name :
Итак, как вы можете видеть, этот контейнер .mp4 имеет видеокодек H.264 и аудиокодек AAC.
Отсутствующий файл ffmpeg.dll для OpenCV не генерирует никаких предупреждений / ошибок в OpenCV 2.3.1, и код не работает. Убедитесь, что у вас есть правильный opencv_ffmpeg * .dll в вашем пути.
Возможно, вы загрузите неправильный файл lib. Как и я, я получаю ту же проблему. Но я могу открыть файл AVI в VC6.0, который использует opencv версию 1.0. Наконец, я считаю, что я использую неправильную библиотеку lib.
В режиме отладки, но я использую opencv_core220.lib
и opencv_highgui220.lib
И я заменяю их opencv_core220d.lib
и opencv_highgui220d.lib
Теперь я могу это прочитать.
В OpenCV 2.4.4: есть только opencv_ffmpeg244.dll (release dll), а не opencv_ffmpeg244d.dll (debug dll)
Поэтому попробуйте в режиме компиляции релиза!
Я также сталкиваюсь с той же проблемой. С образцом кода для VideoCapture моя визуальная студийная программа не смогла открыть какой-либо видеофайл. Тогда предложение nimcap работает для меня. «Отсутствующий файл ffmpeg.dll от OpenCV не генерирует никаких предупреждений / ошибок в OpenCV 2.3.1, и код не работает без проблем. Убедитесь, что у вас есть правильный opencv_ffmpeg * .dll в вашем пути».
Скопируйте opencv_ffmpeg.dll в мою проект visual studio /Debug
, я могу открыть практически любой видеофайл с VideoCapture.
В Windows x64 вам не нужно ничего переименовывать. Просто поставьте следующее … \ opencv \ build \ x64 \ vc12 \ bin в свой PATH .
Просто измените свой код:
VideoCapture capture("guitarplaying.avi");
к этому:
CvCapture *input_video = cvCreateFileCapture("guitarplaying.avi");
Я просто добавляю к этому, поскольку я провел больше времени, чем я хотел бы признать. Невозможность открыть файл вызвала массу странных исключений.
Если вы обнаружите, что работают абсолютные пути, а относительные пути не работают, необходимо проверить, правильно ли установлен рабочий каталог.
В Visual Studio это Свойства проекта (Свойства конфигурации) -> Отладка -> Рабочий каталог. Я по умолчанию установил мой «$ (ProjectDir)», когда мне действительно захотелось «$ (OutDir)».
Вам нужно просто загрузить для вашего компьютера Xvid из xvid.org, вот и все: http://www.xvid.org/Downloads.15.0.html
Откройте D:\OpenCV\build\x64\vc14\bin
и скопируйте opencv_ffmpeg320.dll
или opencv_ffmpeg320_64.dll
что подходит для вас на основе Windows (x86 or x64)
.
opencv_ffmpeg320.dll
-> для 32-bit Windows (x86)
opencv_ffmpeg320_64.dll
-> для 64-bit Windows (x64)
Вставьте скопированную .dll
в C:\Python27\
или любое место, доступное из PATH
среды Windows PATH
.
Кроме того, вы можете создать папку D:\OpenCV\vendor\
и добавить .dll
файл в эту папку, а затем добавить D:\OpenCV\vendor\
в windows environment variables
.