2012-09-05 38 views
6

Tengo un problema al usar la clase VideoCapture con OpenCV 2.4.2 en Windows XP 32bits. No abre ningún archivo o cámara y solucionarlo es un problema. Estoy usando Visual Studio 2010 pero también he probado el código en QTcreator con el mismo resultado.Error de VideoCapture OpenCV 2.4.2 en Windows

código La prueba es el siguiente:

#include "opencv/cv.h" 
#include "opencv/highgui.h" 
#include <iostream> 
#include <string> 
#include <iomanip> 
#include <sstream> 

using namespace cv; 
using namespace std; 

int main() 
{ 
    const char* videoPath = "C:/video/"; 
    string videoName = string(videoPath) + "avi.avi"; 
    VideoCapture cap(videoName); 

    if(!cap.isOpened()) 
    { 
     std::cout<<"Fail"<<std::endl; 
     return -3; 
    } 
    return 0; 
} 

La salida es siempre '-3'. Qt Creator muestra una advertencia: Error al abrir el archivo (../../modules/highgui/src/cap_ffmpeg_impl.hpp:361)

I depurado y el problema aparece en la primera línea de:

CvCapture* cvCreateFileCapture_FFMPEG_proxy(const char * filename) 
{ 
    CvCapture_FFMPEG_proxy* result = new CvCapture_FFMPEG_proxy; 
    if(result->open(filename)) 
     return result; 
    delete result; 
#if defined WIN32 || defined _WIN32 
    return cvCreateFileCapture_VFW(filename); 
#else 
    return 0; 
#endif 
} 

en el archivo interno cap_ffmpeg.cpp.

He probado el mismo código en un Mac con Snow Leopard y funciona. No hay sorpresas aquí ya que debe ser un problema de la biblioteca. He abierto el archivo avi con la misma ruta de acceso usando la función cvCapture fácil y rápido. Obtuve todos los dlls de 'C: \ opencv \ opencv \ build \ x86 \ vc10 \ bin' incluidos en mi archivo de depuración. Obtuve el archivo tbb.dll y todo el contenido 'C: \ opencv \ opencv \ 3rdparty \ ffmpeg' incluido también.

Esto me está volviendo loco así que cualquier ayuda sería apreciada.

Gracias de antemano.

+0

La primera respuesta a [esta pregunta] (http://stackoverflow.com/questions/1987782/why-opencvs-cvcreatecameracapture-and-cvcreatefilecapture-do-not-work-how) podría ser su caso: intente copiar opencv_ffmpeg242d .dll o opencv_ffmpeg242.dll a su directorio de trabajo actual. Además, ¿has construido OpenCV tú mismo? ¿Estás seguro de que todas las dependencias están bien? – Sassa

+0

Todavía tengo el mismo problema. He leído en algunos foros que tal vez sea necesario actualizar los códecs. Probaré eso. ¿Has resuelto el problema? –

Respuesta

5

En mi caso, el mismo problema se resolvió después de eliminar todos los archivos opencv_***.dll en C:\Windows\System32. Por lo tanto, uso los archivos dll solo a través de la ruta como "%PATH%;C: \Program Files \OpenCV2.4.2\build\x86\vc10/bin". Por favor pruebalo.

+0

¡Gracias, eso funcionó! – Cits

+0

I (de manera conservadora) intenté simplemente mover todos los archivos opencv _ *. Dll fuera de Windows \ System32 y también fuera de Windows \ SysWOW64. Reiniciado, todavía no funcionó. Comprimió los dlls y eliminó los originales; Reiniciado nuevamente, ¡funcionó de maravilla! La sugerencia de Young-Shik Kwon es muy buena. –

3

también me encontré con este problema y lo resolvió por el camino correcto de la función:

VideoCapture cap(videoName); 

Si el archivo AVI de videoName existen does't, será un error:

(../../modules/highgui/src/cap_ffmpeg_impl.hpp:XXX) 

donde XXX representa el número de línea.

0

Tuve el mismo problema con el método abierto mientras corría bajo Windows 8 (64bit), opencv 2.4.10. IDE se ejecuta en x86.

Descubrí que la ejecución de la aplicación en la configuración de la versión solucionó el problema.

Tropezamos con la respuesta porque tenía el mismo problema con imread. El problema se presenta en este hilo. imread not working in Opencv

0

Ver la solución que encontré más abajo, para archivos mp4. Me enfrenté al mismo problema en Windows 7, usando OpenCV 2.4.9. Estoy usando el contenedor java para opencv.

Matthias Krings ha investigado mucho sobre esto. Ver this. Aparentemente, este es un problema basado en el tipo de archivo de video. Con archivos .avi, parece funcionar para mucha gente. Desafortunadamente, su solución de configuración OPENCV_DIR no funcionó para mí. Pero sus comentarios en la lista de errores me dieron una pista para solucionar el problema.

que tiene que hacer dos cosas:

  1. Set java.library.path para incluir el directorio {opencv\install\dir}opencv-2.4.9\build\x86\vc10\bin. Puede establecer la variable usando la opción -D en la línea de comando java: java -Djava.library.path=PATH_TO_YOUR_DLL .... También obtenga esta variable de su entorno, usando System.getProperty(...), e imprímala antes de llamar al loadLibrary(), para verificar que la configuración de la ruta esté funcionando.
  2. Y en su clase java, cargue ffmpeg dll usando System.loadLibrary("opencv_ffmpeg249");. La función loadLibrary() debe invocarse desde un static block en java.
  3. Hay un archivo llamado opencv_ffmpeg249.dll en el java.library.path que establecemos.
  4. Esto funciona en ubuntu también, para archivos .so.
0

Yo también enfrenté el mismo problema y resolví después de señalar la ubicación correcta del video de entrada.

Cuestiones relacionadas