[gelöst][Anfängerfrage] opencv funktioniert nicht!



  • Hallo c-community,

    ich benötige für mein Studium eine Möglichkeit auf Kameras zurück zu greifen. Ich habe mir einige Beiträge im Netz angeschaut und mich für OpenCV (kenne auch die Möglichkeiten VFW und DirectShow/ DirectX) entschieden. Folgendes habe ich schon gemacht:
    1. OpenCV 2.0 und 2.2 installiert nach folgender Seite http://www.samontab.com/web/2010/03/installing-opencv-2-0-in-ubuntu/. Das scheint auch ohne Fehler erfolgt zu sein.
    2. Ein einfaches Beispiel raus gesucht, mit der ich die Funktion von opencv über USB angeschlossene Webcam (Test-Kamera) ausprobieren wollte. Beispiel:

    #include "/home/usr/Programmierung/OpenCV-2.0.0/include/opencv/cv.h" 
     #include "/home/usr/Programmierung/OpenCV-2.0.0/include/opencv/highgui.h" 
     #include <stdio.h>  
     // A Simple Camera Capture Framework 
     int main() {
       CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY );
       if ( !capture ) {
         fprintf( stderr, "ERROR: capture is NULL \n" );
         getchar();
         return -1;
       }
       // Create a window in which the captured images will be presented
       cvNamedWindow( "mywindow", CV_WINDOW_AUTOSIZE );
       // Show the image captured from the camera in the window and repeat
       while ( 1 ) {
         // Get one frame
         IplImage* frame = cvQueryFrame( capture );
         if ( !frame ) {
           fprintf( stderr, "ERROR: frame is null...\n" );
           getchar();
           break;
         }
         cvShowImage( "mywindow", frame );
         // Do not release the frame!
         //If ESC key pressed, Key=0x10001B under OpenCV 0.9.7(linux version),
         //remove higher bits using AND operator
         if ( (cvWaitKey(10) & 255) == 27 ) break;
       }
       // Release the capture device housekeeping
       cvReleaseCapture( &capture );
       cvDestroyWindow( "mywindow" );
       return 0;
     }
    

    Ok soweit so gut. Leider geben beide installierten Varianten Fehler aus, die ich als Anfänger leider nicht wirklich deuten kann. Die Version 2.2 scheint dabei die schlechtere Version zu sein, da der Fehler beim Compilieren (gcc -o ocvtest ocvtest.c) folgenden Fehler ausgibt:

    // Dies ist nur ein Auszug, da der vollständige Fehlerbericht sehr lang ist!
    
    gcc -o ocvtest ocvtest.c
    In file included from ocvtest.c:1:
    /home/theghostod/Programmierung/OpenCV-2.2.0/include/opencv/cv.h:63: fatal error: opencv2/core/core_c.h: No such file or directory
    compilation terminated.
    

    Die Dateien, die gefordert sind, liegen leider nicht im Installationspfad vor, was ziemlich komisch ist. Das Fehlen der Dateien kann ich mir nicht erklären. Ich habe sie definitiv gelöscht.

    Die Version 2.0 von OpenCV meldet keine Fehler wegen nicht vorhandenen Headern, sondern dass Variablen nicht definiert wurden.

    // Dies ist nur ein Auszug, da der vollständige Fehlerbericht sehr lang ist!
    
    gcc -o ocvtest ocvtest.c
    /tmp/ccTp7LFs.o: In function `cvRound':
    ocvtest.c:(.text+0x19): undefined reference to `lrint'
    /tmp/ccTp7LFs.o: In function `cvDecRefData':
    ocvtest.c:(.text+0xa48): undefined reference to `cvFree_'
    ocvtest.c:(.text+0xab9): undefined reference to `cvFree_'
    /tmp/ccTp7LFs.o: In function `cvGetRow':
    ocvtest.c:(.text+0xbaf): undefined reference to `cvGetRows'
    /tmp/ccTp7LFs.o: In function `cvGetCol':
    ocvtest.c:(.text+0xbda): undefined reference to `cvGetCols'
    /tmp/ccTp7LFs.o: In function `cvReleaseMatND':
    ocvtest.c:(.text+0xbed): undefined reference to `cvReleaseMat'
    /tmp/ccTp7LFs.o: In function `cvSubS':
    ocvtest.c:(.text+0xd0d): undefined reference to `cvAddS'
    /tmp/ccTp7LFs.o: In function `cvCloneSeq':
    ocvtest.c:(.text+0xd5b): undefined reference to `cvSeqSlice'
    /tmp/ccTp7LFs.o: In function `cvSetNew':
    ocvtest.c:(.text+0xdba): undefined reference to `cvSetAdd'
    

    Der kopierte Quelltext ist aber vollständig! Ich weiß es ist nicht wirklich "professionell" einfach was zu kopiern und dann zu verlangen, dass es ohne weiteres funktioniert. Dies ist auch nicht der Sinn der Sache, sondern ich wollte anhand des einfachen Beispiels die Funktionen erlernen, um dann meine Aufgabe mit einem verstandenen Quellcode zu erweitern.

    Ich hoffe jemand kann mir helfen und sagen, was ich falsch mache oder warum die eine Version von OpenCV nicht funktioniert.

    MfG
    mirrowwinger



  • "undefined reference" heißt einfach, dass du die Bibliothek nicht linkst. Header zu includen reicht nicht!

    Das geht normalerweise so:

    gcc -lfoo ...

    wobei das foo für libFOO.so steht (ohne das lib oder die Endung!). Siehe auch GCC-Handbuch.



  • Ah gut, das bringt mich schonmal weiter. Habe meinen Compilierungsbefehl abgeändert:

    gcc -o ocvtest ocvtest.c -lcv -lhighgui
    

    Jetzt besteht folgendes Problem, dass ich die libś nicht finde (auf dem gesamten Computer habe ich die Suche nach: "lib*.so" und "*.so" durchgeführt). Muss ich die mir extra irgendwo downloaden?

    mirowwinger



  • mirrowwinger schrieb:

    Muss ich die mir extra irgendwo downloaden?

    Ja. Welche Distro verwendest du?

    Unter Ubuntu heiszt das entsprechende Paket "libcv-dev" (und du moechtest wohl noch ein paar andere dazu), dh. du klopfst sudo apt-get install libcv-dev libcvaux-dev libhighgui-dev in den Terminal-Emulator deiner Wahl und alles sollte laufen.

    Siehe auch https://help.ubuntu.com/community/OpenCV



  • ok deine sudo apt-get ... war nicht 100% richtig. Habe mir im Packetmanager aber die Packete, die gefehlt haben zusammen suchen können und alles läuft.

    Vielen Dank
    mirrowwinger


Anmelden zum Antworten