2012-05-06 15 views
7

primera vez publicando una pregunta aquí en stackoverflow. Lo siento si elimino el formato!error de símbolo externo no resuelto al importar bibliotecas para OpenCV2.3 en Visual Studios 2010 Express C++

Estoy intentando seguir un tutorial básico de OpenCV, a saber éste: http://aishack.in/tutorials/tracking-colored-objects-in-opencv/

He mirado en varios curso en línea sobre cómo instalar OpenCV, incluyendo:

Setup OpenCV-2.3 for Visual Studio 2010 y OpenCV. willowgarage.com/wiki/VisualC%2B%2B

sin mucha suerte.

La versión actual que tengo en ejecución ahora es OpenCV 2.3.0. Estoy actualmente en ejecución en Windows 7 con Microsoft Visual C++ Express 2010.

Siempre que intento para generar y ejecutar el código, consigo los siguientes errores:

1>------ Build started: Project: Camera, Configuration: Debug Win32 ------ 
1>camera.obj : error LNK2019: unresolved external symbol _cvReleaseImage referenced in function "struct _IplImage * __cdecl GetThresholdedImage(struct _IplImage *)" ([email protected]@[email protected]@[email protected]@Z) 
1>camera.obj : error LNK2019: unresolved external symbol _cvInRangeS referenced in function "struct _IplImage * __cdecl GetThresholdedImage(struct _IplImage *)" ([email protected]@[email protected]@PA[email protected]@Z) 
1>camera.obj : error LNK2019: unresolved external symbol _cvCvtColor referenced in function "struct _IplImage * __cdecl GetThresholdedImage(struct _IplImage *)" ([email protected]@[email protected]@[email protected]@Z) 
1>camera.obj : error LNK2019: unresolved external symbol _cvCreateImage referenced in function "struct _IplImage * __cdecl GetThresholdedImage(struct _IplImage *)" ([email protected]@[email protected]@[email protected]@Z) 
1>camera.obj : error LNK2019: unresolved external symbol _cvGetSize referenced in function "struct _IplImage * __cdecl GetThresholdedImage(struct _IplImage *)" ([email protected]@[email protected]@[email protected]@Z) 
1>camera.obj : error LNK2019: unresolved external symbol _cvReleaseCapture referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvWaitKey referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvShowImage referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvAdd referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvLine referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvGetCentralMoment referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvGetSpatialMoment referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvMoments referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvQueryFrame referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvNamedWindow referenced in function _main 
1>camera.obj : error LNK2019: unresolved external symbol _cvCreateCameraCapture referenced in function _main 
1>C:\Users\Kevin\Documents\Visual Studio 2010\Projects\Camera\Debug\Camera.exe : fatal error LNK1120: 16 unresolved externals 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

Mi código es el siguiente:

#include "cv.h" 
#include "highgui.h" 

IplImage* GetThresholdedImage(IplImage* img) 
{ 
IplImage* imgHSV = cvCreateImage(cvGetSize(img), 8, 3); 
cvCvtColor(img, imgHSV, CV_BGR2HSV); 
IplImage* imgThreshed = cvCreateImage(cvGetSize(img), 8, 1); 
cvInRangeS(imgHSV, cvScalar(20, 100, 100), cvScalar(30, 255, 255), imgThreshed); 
cvReleaseImage(&imgHSV); 
return imgThreshed; 
} 

int main() 
{ 
CvCapture* capture = 0; 
capture = cvCaptureFromCAM(1); 
    if(!capture) 
{ 
    printf("Could not initialize capturing...\n"); 
    getchar(); 
    return -1; 
} 

cvNamedWindow("video"); 
cvNamedWindow("thresh"); 
IplImage* imgScribble = NULL; 

while(1) 
{ 
    IplImage* frame = 0; 
    frame = cvQueryFrame(capture); 

    if(!frame) 
     break; 
    //cvErode(frame, frame, 0, 2); // ADD this line 
    //initalize the scribble frame if has not already been done yet 
    if(imgScribble == NULL) 
    { 
     imgScribble = cvCreateImage(cvGetSize(frame), 8, 3); 
    } 
    IplImage* imgYellowThresh = GetThresholdedImage(frame); 

    CvMoments *moments = (CvMoments*)malloc(sizeof(CvMoments)); 
    cvMoments(imgYellowThresh, moments, 1); 

    // The actual moment values 
    double moment10 = cvGetSpatialMoment(moments, 1, 0); 
    double moment01 = cvGetSpatialMoment(moments, 0, 1); 
    double area = cvGetCentralMoment(moments, 0, 0); 

    // Holding the last and current ball positions 
    static int posX = 0; 
    static int posY = 0; 

    int lastX = posX; 
    int lastY = posY; 

    posX = moment10/area; 
    posY = moment01/area; 

    printf("position (%d,%d)\n", posX, posY); 

    // We want to draw a line only if its a valid position 
    if(lastX>0 && lastY>0 && posX>0 && posY>0) 
    { 
     // Draw a yellow line from the previous point to the current point 
     cvLine(imgScribble, cvPoint(posX, posY), cvPoint(lastX, lastY), cvScalar(0,255,255), 5); 
    } 


    cvAdd(frame, imgScribble, frame); 
    cvShowImage("thresh", imgYellowThresh); 
    cvShowImage("video", frame); 

    int c = cvWaitKey(5); 
     if((char)c==27) 
     break; 

    // Release the thresholded image+moments... we need no memory leaks.. please 
    cvReleaseImage(&imgYellowThresh); 

    delete moments; 
} 
// We're done using the camera. Other applications can now use it 
cvReleaseCapture(&capture); 
cvReleaseCapture(&capture); 
return 0; 

} 

he instalado Open CV a C:\OpenCV2.3

he añadido dependencias adicionales, añadir directorios institucionales, ect. Para las preferencias de mi proyecto, que son los siguientes:

Dependencias adicionales:

enter code here 
opencv_core230.lib 
opencv_highgui230.lib 
opencv_legacy230.lib 
opencv_video230.lib 
opencv_ml230.lib 
opencv_core230d.lib 
opencv_highgui230d.lib 
opencv_legacy230d.lib 
opencv_video230d.lib 
opencv_ml230d.lib 
opencv_calib3d230d.lib 

Adicional Biblioteca directorios: C:\OpenCV2.3\build\x64\vc10\lib;C:\OpenCV2.3\build\x64\vc10\bin;C:\OpenCV2.3\build\x64\vc10\staticlib;%(AdditionalLibraryDirectories)

también cuentan con directorios:

C:\OpenCV2.3\build\include\opencv;C:\OpenCV2.3\build\include\opencv2;C:\OpenCV2.3\build\include 

también Incluido una ruta a la DLL en mi variable de ruta para Windows:

;C:\OpenCV2.3\build\x64\vc10\bin;C:\OpenCV2.3\build\bin; 

He visto otros foros, otras preguntas sobre desbordamiento de pila, etc. sin mucha ayuda. He intentado que esto funcione durante la mayor parte de un fin de semana. ¡Cualquier ayuda sería muy apreciada!

+1

por qué se hace la misma pregunta dos veces en 4 horas: http://stackoverflow.com/questions/10472393/opencv-wont-compile-due-to-unresolved-externals-lnk2019#comment13530952_10472393 – guinny

Respuesta

19

Si ha configurado explícitamente la vinculación con todo lo necesario bibliotecas, pero aún se muestran errores de enlace, es posible que esté mezclando bibliotecas y aplicaciones de 64/32 bits.

I.e. asegúrese de que toda la biblioteca incluya una versión de bibliotecas de 32 bits si está creando aplicaciones de 32 bits.

+3

FYI: BUILD -> Administrador de configuraciones. verificar 'plataforma' es 'x64'. – plhn

+0

+1 para la configuración de la plataforma de Configuration Manager. Thx plhn. – user1738934

3

tuve un problema similar cuando estaba tratando de recopilar biblioteca cvblob (http://code.google.com/p/cvblob/) en Windows 7 de 32 bits con Visual Studio 2010.

Si todo más se hace correctamente, prueba mi conjetura escrita a continuación. Si no empezar con estos tutoriales:

  • Instalación OpenCV: http://docs.opencv.org/trunk/doc/tutorials/introduction/windows_install/windows_install.html#cpptutwindowsmakeown
  • Configuración de los proyectos para construir y trabajar con OpenCV: http://docs.opencv.org/trunk/doc/tutorials/introduction/windows_visual_studio_Opencv/windows_visual_studio_Opencv.html#windows-visual-studio-how-to.

    Estos errores de enlace silimar desaparecieron después de cambiar algún proyecto propiedades:

    • En VS 2010 abrir su solución
    • Abra el Explorador de soluciones (Ver-> Explorador de soluciones)
    • Encuentra un proyecto que generó estos errores de enlazador. (En mi ejemplo era un proyecto llamado "cvblob" solución en el interior llama "cvBlob" generada por cmake.)
    • clic derecho en ese proyecto
    • En el menú contextual seleccione propiedades
    • Por Selección izquierda propiedades configuración -> general y encontrar un campo llamado "extensión de destino"
    • En Detalles del Proyecto encontrar la configuración del proyecto para "Tipo de configuración"
    • analízalos. En mi problema particular de compilación de cvblob tuve que configurar Extensión de destino a .lib y Tipo de configuración a Biblioteca estática. Esta es también una solución para chicos que intentan compilar biblioteca cvblob en Visual Studio 2010. Haga lo mismo para la versión de depuración y versión si es necesario.

errores que obtuve fueron:

Error 24 error LNK2019: unresolved external symbol _cvSetImageROI referenced in function _cvSetImageROItoBlob C:\cvblob\build\lib\cvblob.obj cvblob

Error 25 error LNK2019: unresolved external symbol _cvSaveImage referenced in function _cvSaveImageBlob C:\cvblob\build\lib\cvblob.obj cvblob

Error 26 error LNK2019: unresolved external symbol _cvGetImageROI referenced in function _cvSaveImageBlob C:\cvblob\build\lib\cvblob.obj cvblob

Error 27 error LNK2001: unresolved external symbol _cvError C:\cvblob\build\lib\cvcolor.obj cvblob

Error 28 error LNK2019: unresolved external symbol _cvError referenced in function _cvRenderBlob C:\cvblob\build\lib\cvblob.obj cvblob

Error 29 error LNK2001: unresolved external symbol _cvError C:\cvblob\build\lib\cvlabel.obj cvblob

Error 30 error LNK2001: unresolved external symbol _cvError C:\cvblob\build\lib\cvcontour.obj cvblob

Error 31 error LNK2001: unresolved external symbol _cvError C:\cvblob\build\lib\cvtrack.obj cvblob

Error 32 error LNK2019: unresolved external symbol _cvLine referenced in function _cvRenderBlob C:\cvblob\build\lib\cvblob.obj cvblob

Error 33 error LNK2001: unresolved external symbol _cvLine C:\cvblob\build\lib\cvcontour.obj cvblob

Error 34 error LNK2019: unresolved external symbol _cvRectangle referenced in function _cvRenderBlob C:\cvblob\build\lib\cvblob.obj cvblob

Error 35 error LNK2001: unresolved external symbol _cvRectangle C:\cvblob\build\lib\cvtrack.obj cvblob

Error 36 error LNK2019: unresolved external symbol _cvSetZero referenced in function _cvLabel C:\cvblob\build\lib\cvlabel.obj cvblob

Error 37 error LNK2019: unresolved external symbol _cvPutText referenced in function _cvRenderTracks C:\cvblob\build\lib\cvtrack.obj cvblob

Error 38 error LNK2019: unresolved external symbol _cvInitFont referenced in function _cvRenderTracks C:\cvblob\build\lib\cvtrack.obj cvblob

Error 39 error LNK1120: 9 unresolved externals C:\cvblob\build\lib\libs\Release\cvblob.dll cvblob

espero que ayude a alguien compilar la biblioteca cvblob en Visual Studio 2010.

+0

¡Agradable! Tengo la construcción de minas, pero ahora ¿cómo lo ejecuto? : P – JSideris

+0

De acuerdo, ¿cómo se ejecuta ahora? –

+0

esto es solo cuando compila una lib no un ejecutable ..... – user1767754

1

Yo tenía el mismo problema, en VS10

me he perdido el "opencv_core246d.lib" para añadir. agregándolo a Linker-> Input-> Aditional Dependencies fixed error.

1

Esto podría ayudar con la versión más nueva.
Para la versión 2.4.8, añadiendo opencv_imgproc248.lib resuelve el siguiente error vincular:

error LNK2019: unresolved external symbol _cvRemap referenced in function _main 
error LNK2019: unresolved external symbol _cvInitUndistortMap referenced in function _main 
error LNK2019: unresolved external symbol _cvFindCornerSubPix referenced in function _main 
error LNK2019: unresolved external symbol _cvCvtColor referenced in function _main 
2

tuve un problema similar en VS10 y me he olvidado de añadir el cv210d.lib. Agregar eso a las propiedades del proyecto-> propiedades de configuración-> Enlazador-> Entrada-> Dependencias Aditionales me ayudó a resolver este problema. Encontré a partir de la pregunta que opencv_cv230.lib no se incluyó en adiciones adicionales, lo que ayudará a resolver el problema.

0

para mí, este error se resolvió agregando dos nombres de lib explícitamente en la entrada (propiedades de configuración -> enlazador -> entrada -> dependencias adicionales).

cuando instala opencv, según la versión, tendrá un número adjunto. Por ejemplo, tengo opencv2.4.13 y tiene 2413 anexado a todas sus bibliotecas, opencv_highgui2413.lib (opencv_highgui2413d.lib para la compilación de depuración).

Ahora, compruebe qué bibliotecas tienen las funciones que se muestran en los errores. highgui tiene la función de cvshowimage -> puede obtenerlo chamuscándolo en línea. http://docs.opencv.org/2.4/modules/highgui/doc/user_interface.html

A continuación, agregue esa lib para ingresar y generar su solución.

Cuestiones relacionadas