reproducir guardar grabar con abrir c++ opencv image-processing video-capture

c++ - guardar - ¿Por qué no puedo abrir avi video en openCV?



opencv video c++ (10)

Abra D:/OpenCV/build/x64/vc14/bin y copie opencv_ffmpeg320.dll o opencv_ffmpeg320_64.dll que sea relevante para usted según su Windows (x86 or x64) .

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

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

Pegue el C:/Python27/ .dll copiado en C:/Python27/ o en cualquier ubicación a la que se pueda acceder desde las variables de entorno de Windows PATH .

Alternativamente, puede crear una carpeta D:/OpenCV/vendor/ y agregar el archivo .dll a esa carpeta y luego agregar D:/OpenCV/vendor/ a sus windows environment variables .

Acabo de escribir un ejemplo simple de lectura de video con openCV2.3.1, pero parece que no puedo abrir el video avi de todos modos :(

VideoCapture capture("guitarplaying.avi"); if(!capture.isOpened()){ std::cout<<"cannot read video!/n"; return -1; } Mat frame; namedWindow("frame"); double rate = capture.get(CV_CAP_PROP_FPS); int delay = 1000/rate; while(true) { if(!capture.read(frame)){ break; } imshow("frame",frame); if(waitKey(delay)>=0) break; } capture.release();

Hice un punto de interrupción en std::cout<<"cannot read video!/n" y encuentro que se detuvo aquí cada vez. Entonces, ¿por qué avi video no se puede abrir? ¡Gracias!


Bajo Windows x64 , no tienes que cambiar el nombre de nada. Simplemente ponga lo siguiente ... / opencv / build / x64 / vc12 / bin en su RUTA .


En OpenCV 2.4.4: solo hay opencv_ffmpeg244.dll (versión dll) y no opencv_ffmpeg244d.dll (debug dll)

Así que intente en el modo de compilación de liberación!


Puede ser que cargues el archivo lib incorrecto. Al igual que yo, obtengo el mismo problema. Pero puedo abrir un archivo AVI en VC6.0 que usa la versión opencv 1.0. Finalmente, encuentro que utilizo la biblioteca incorrecta.

En modo de depuración, pero uso opencv_core220.lib y opencv_highgui220.lib . Y los sustituyo por opencv_core220d.lib y opencv_highgui220d.lib . Ahora puedo leerlo.


Solo cambia tu código de esto:

VideoCapture capture("guitarplaying.avi");

a esto:

CvCapture *input_video = cvCreateFileCapture("guitarplaying.avi");


Solo estoy sumando a esto ya que pasé más tiempo del que quisiera admitir. No poder abrir el archivo causó un montón de extrañas excepciones.

Si encuentra que las rutas absolutas funcionan, mientras que las rutas relativas no funcionan, otra cosa que debe verificar es asegurarse de que el directorio de trabajo esté configurado correctamente.

En Visual Studio esto es Propiedades del proyecto (Propiedades de configuración) -> Depuración -> Directorio de trabajo. Encontré el mío configurado en "$ (ProjectDir)" por defecto cuando realmente quería "$ (OutDir)".



También me encuentro con el mismo problema. Con el código de muestra para VideoCapture, mi programa de estudio visual no pudo abrir ningún archivo de video. Entonces, la sugerencia de nimcap funciona para mí. "Ffmpeg.dll faltante de OpenCV no genera advertencias / errores en OpenCV 2.3.1, y el código falla silenciosamente. Asegúrese de tener la opencv_ffmpeg * .dll adecuada en su ruta".

Solución: copie opencv_ffmpeg.dll en mi proyecto visual studio /Debug folder, puedo abrir casi cualquier archivo de video con VideoCapture.


Un ffmpeg.dll faltante de OpenCV no genera advertencias / errores en OpenCV 2.3.1, y el código falla silenciosamente. Asegúrese de tener la opencv_ffmpeg * .dll adecuada en su ruta.


1)
Asegúrese de que el archivo de video esté en la misma carpeta que la aplicación (supongo que ya lo ha intentado), de lo contrario, especifique la ruta absoluta.

2)
Si está en Windows, es posible que necesite un paquete de códecs para leer el archivo de video (por ejemplo, K-Lite Codec Pack ).

Como Macmade sugirió, AVI es simplemente un contenedor que puede alojar diferentes códecs de audio, video o incluso subtítulos. Además, here están las compilaciones FFmpeg de Zeranoe para Windows. Puede obtener más información sobre el contenido del códec de su archivo si hace lo siguiente:

ffmpeg -i guitarplaying.avi

Deberías ver una salida como esta:

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 :

Entonces, como puede ver, este contenedor .mp4 tiene un códec de video H.264 y un códec de audio AAC.