Perché non posso aprire video avi in ​​openCV?

Ho appena scritto un semplice esempio di lettura di video con openCV2.3.1, ma sembra che non posso aprire comunque video avi 🙁

VideoCapture capture("guitarplaying.avi"); if(!capture.isOpened()){ std::cout<=0) break; } capture.release(); 

Ho fatto un breakpoint in std::cout<<"cannot read video!\n" e scopro che si è fermato qui ogni volta. Allora, perché il video avi non può essere aperto? Grazie!

1)
Assicurati che il file video sia effettivamente nella stessa cartella dell’applicazione (presumo che tu abbia già provato questo), altrimenti specifica il percorso assoluto.

2)
Se sei su Windows, potresti aver bisogno di un pacchetto di codec per leggere il file video (ad esempio, K-Lite Codec Pack ).

Come suggerito da Macmade, AVI è semplicemente un contenitore che può ospitare diversi codec audio, video o anche di sottotitoli codificati. Inoltre, ecco le build FFmpeg di Zeranoe per Windows. Puoi ottenere ulteriori informazioni sul contenuto del codec del tuo file se fai quanto segue:

 ffmpeg -i guitarplaying.avi 

Dovresti vedere un output che assomiglia a questo:

 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 : 

Quindi, come puoi vedere questo contenitore .mp4 ha un codec video H.264 e un codec audio AAC.

Il file ffmpeg.dll di OpenCV mancante non genera alcun avviso / errore in OpenCV 2.3.1 e il codice non funziona in modo silenzioso. Assicurati di avere opencv_ffmpeg * .dll corretto nel tuo percorso.

Potresti caricare il file lib errato. Proprio come me, ottengo lo stesso problema. Ma posso aprire il file AVI in VC6.0 che usa la versione 1.0 di opencv. Infine, trovo che uso la lib errata.

In modalità debug, ma uso opencv_core220.lib e opencv_highgui220.lib . E li sostituisco con opencv_core220d.lib e opencv_highgui220d.lib . Ora posso leggerlo.

In OpenCV 2.4.4: c’è solo opencv_ffmpeg244.dll (release dll) e non opencv_ffmpeg244d.dll (debug dll)

Quindi prova nella modalità di compilazione della versione!

Incontro anche lo stesso problema. Con il codice di esempio per VideoCapture, il mio programma di Visual Studio non è riuscito ad aprire alcun file video. Quindi, il suggerimento di nimcap funziona per me. “Ffmpeg.dll di OpenCV mancante non genera alcun avviso / errore in OpenCV 2.3.1 e il codice non funziona in modo corretto. Assicurati di avere opencv_ffmpeg * .dll corretto nel tuo percorso.”

Soluzione: copia opencv_ffmpeg.dll nel mio progetto di Visual Studio /Debug cartella /Debug , posso aprire quasi tutti i file video con VideoCapture.

Sotto Windows x64 , non è necessario rinominare nulla. Basta mettere il seguente … \ opencv \ build \ x64 \ vc12 \ bin nel tuo PATH .

Basta cambiare il tuo codice da questo:

 VideoCapture capture("guitarplaying.avi"); 

a questa:

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

Sto solo aggiungendo questo dato che ho trascorso più tempo di quanto vorrei ammettere. Non essere in grado di aprire il file ha causato una tonnellata di strane eccezioni.

Se trovi che i percorsi assoluti funzionano, mentre i percorsi relativi non funzionano, un’altra cosa da verificare è assicurarsi che la directory di lavoro sia impostata correttamente.

In Visual Studio si tratta di Proprietà progetto (Proprietà di configurazione) -> Debug -> Directory di lavoro. Ho trovato il mio impostato su “$ (ProjectDir)” di default quando volevo davvero “$ (OutDir)”.

Devi solo scaricare per la tua macchina Xvid da xvid.org che è tutto: http://www.xvid.org/Downloads.15.0.html

Apri D:\OpenCV\build\x64\vc14\bin e copia opencv_ffmpeg320.dll o opencv_ffmpeg320_64.dll che è rilevante per te in base al tuo Windows (x86 or x64) .

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

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

Incolla il file .dll copiato in C:\Python27\ o qualsiasi posizione accessibile dalle variabili di ambiente PATH Windows.

In alternativa, è ansible creare una cartella D:\OpenCV\vendor\ e aggiungere il file .dll in quella cartella e quindi aggiungere D:\OpenCV\vendor\ alle windows environment variables .