Bild von Webcam mit mehr als 640x480 Pixeln Auflösung in eine Anwendung einbauen



  • Leider komme ich gar nicht so richtig dazu, endlich das Programm zu erstellen. Nach etlichen Stunden habe ich nun endlich OpenCV-2.1.0-win32-vs2008.exe installiert, daraus die lib-Dateien für den Borland-Builder6 mit "coff2omf" laut opencv-Wiki generiert u. lib- und h-Dateien in Borland-Programmordner kopiert u. die dll-Dateien in den Win-Systemordner kopiert.
    Ergebnis beim Compilieren mit obigem Quellcode ergibt:

    [C++ Fehler] cxcore.hpp(2208): E2028 Der Operator -> muß einen Zeiger oder eine Klasse zurückgeben
      [C++ Fehler] cxoperations.hpp(968): E2015 Mehrdeutigkeit zwischen '_STL::_fm_cos(const _STL::complex<long double> &)' und '_STL::_fm_cos(const _STL::complex<float> &)'
      [C++ Fehler] cxoperations.hpp(969): E2015 Mehrdeutigkeit zwischen '_STL::_fm_sin(const _STL::complex<long double> &)' und '_STL::_fm_sin(const _STL::complex<float> &)'
      [C++ Fehler] cxoperations.hpp(2016): E2028 Der Operator -> muß einen Zeiger oder eine Klasse zurückgeben
      [C++ Fehler] cxmat.hpp(839): E2015 Mehrdeutigkeit zwischen 'Mat::operator MatExpr_<Mat,Mat>() const' und 'MatExpr_<Mat,Mat>::MatExpr_(const Mat &)'
    

    Der 1. Fehler bezieht sich auf die Zeile

    FileNode operator ->() const;
    

    Und nu?



  • Habe alternativ über die Datei opencv_test0.zip (1 MB) von http://www.tetraedre.com/advanced/index.php heruntergeladen, da darin schon alle libs und Headerdateien für BorlandBuilder 6 enthalten sein sollen. Benutze ich diese (in meinem Projektordner) dann bringt mir der Linker die Fehler:

    [Linker Fehler] Unresolved external '_cvCaptureFromCAM' referenced from D:\CAM\UNIT1.OBJ
      [Linker Fehler] Unresolved external '_cvSetCaptureProperty' referenced from D:\CAM\UNIT1.OBJ
      [Linker Fehler] Unresolved external '_cvNamedWindow' referenced from D:\CAM\UNIT1.OBJ
      [Linker Fehler] Unresolved external '_cvQueryFrame' referenced from D:\CAM\UNIT1.OBJ
      [Linker Fehler] Unresolved external '_cvShowImage' referenced from D:\CAM\UNIT1.OBJ
      [Linker Fehler] Unresolved external '_cvWaitKey' referenced from D:\CAM\UNIT1.OBJ
      [Linker Fehler] Unresolved external '_cvReleaseCapture' referenced from D:\CAM\UNIT1.OBJ
      [Linker Fehler] Unresolved external '_cvDestroyWindow' referenced from D:\CAM\UNIT1.OBJ
    


  • Habe es nun geschafft die opencv-Dateien einzubinden (cv097.lib,...). Die aktuellste Version (cv210,...) bekomme ich leider nicht zum Laufen.
    Leider erscheint aber kein Bild, sondern immer "QueryFrame failed !" (vgl. Quellcode oben).
    ???



  • Hi

    Ich benutze VS2008 PRO mit aktuellster SDK, darum kann ich dir leider nicht helfen da ich keine erfahrung mit Borland habe !. Sorry
    Hast du vielleicht ein CodecPack installiert ? Hatte ne menge Probleme bez. OpenCv
    und Codec-Pack's ! Den Grund kannst du dir denken 😃

    Zu den Lib's:

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

    Diese Header sollten eingebunden sein.

    Und nicht zu vergessen ... die Auflösungen sollten standards entsprechen.

    320x240 - 640x480 - 800x600 - 1024x768 - 1600x1200

    nach diesem Schema, aber das weist du sicher.

    lowbyte



  • Codec pack habe ich, werde ich mal deinstallieren.
    Andere Sache: Evtl. liegt es an der DeviceID.
    Wie kann ich programmieren, dass in einer z.B. Liste angezeigt wird, welche Geräte verfügbar sind, sodass man ein Gerät dort auswählen kann?



  • Funzt, nachdem ich Codecpack deinstalliert und alte Webcamtreiber deinstalliert habe!!! Danke!



  • Leider ändert sich bei mir keine Auflösung u. auch keine Fenstergröße über

    ShowStreamFromCam(-1 ,"LiveWebcam" ,1024 ,768 ,30
    


  • Hi

    Device ID sollte 0 sein ist aber nicht tragisch, da er das erste Device nimmt. Jede weitere angeschlossen Cam had id 1 ,2 ,3 usw.
    Bei meiner Integrierten Webcam läuft alles bis 1024x768 manchmal kann ich sie sogar übersteuern bis 1600x1200 doch dan habe ich ca noch 8 fps. Bei meiner
    Logitech 2 MP Webcam C600 bis 1600x1200 ohne Probleme.

    lowbyte



  • Hi

    Und übertreibe nicht mit den fps. Den ich denke nicht das deine Cam bei 1600x1200 noch 30 fps bringt. Die fps würde ich von Opencv verwalten lassen !

    Dieser wert bringt dir nur wirklich was wenn du zbsp. nur 5 fps willst, aber sonnst wie gesagt von opencv machen lassen. Wäre halt schon nice wenn du die aktuellste lib nehmen könntest.

    lowbyte



  • Welchen fps-Wert muss ich denn übergeben, damit opencv fps selbst verwaltet? 0 ?



  • warum ist das erstellte Fenster bei unterschiedlichen übergebenen Auflösungen immer gleich groß, egal ob cvNamedWindow(windowname, 1); oder cvNamedWindow(windowname, 0); gewählt wurde?
    Wenn ich danach z.B.

    cvResizeWindow(windowname,width+=10,height+=10);
    

    anwende, dann vergrößert sich schlagartig das Fenster auf die Größe, die der anfänglich übergebenen Auflösung entspricht.



  • also mache ich jetzt einfach direkt nach

    cvQueryFrame
    

    ein

    cvResizeWindow(windowname,width,height);
    


  • Wie kann ich meinen frame um einen bestimmten Faktor zoomen (zentriert)?
    Habe bereits mit resize und cvGetRectSubPix experimentiert, aber klappt nicht so.

    gelöst:

    frame_changed = cvCreateImage
                                   ( cvSize(frame->width*100/zoomfaktor ,
                                    frame->height*100/zoomfaktor),
                                    frame->depth, frame->nChannels );
              //Bildauszug aus Frame nehmen u. in frame_changed kopieren, frame_changed enthält gezoomtes Bild
              cvGetRectSubPix(frame, frame_changed, cvPoint2D32f(frame->width/2,frame->height/2));
    


  • Hi

    Das kannst du etwa so machen ...

    int Zooming( struct _IplImage *framesrc ,int zoomvalue ,int rovalue)
    
    	struct _IplImage *dst = NULL;
        float factor;
        float m[6];
        CvMat M = cvMat(2, 3, CV_32F, m);
        int w1 = framesrc->width;
        int h1 = framesrc->height;
    
    	// Erstelle image für zoom
    	dst = cvCreateImage( cvSize(framesrc->width ,framesrc->height), framesrc->depth, framesrc->nChannels );
    
    	// Calculate zoom factor
        factor = (float)(1.0 - ((0.1 * zoomvalue)/8));
    
    	m[0] = (float)(factor*cos((rovalue)*CV_PI/360.));
    	m[1] = (float)(factor*sin((rovalue)*CV_PI/360.));
        m[3] = -m[1];
        m[4] = m[0];
    	m[2] = w1*0.5f;  
        m[5] = h1*0.5f;  
    
        cvGetQuadrangleSubPix( framesrc, dst, &M);
    
    	// Build frame
    	memcpy(framesrc->imageData ,dst->imageData ,dst->imageSize);
    	memcpy(&framesrc->height ,&dst->height ,sizeof(int) );
    	memcpy(&framesrc->width ,&dst->width ,sizeof(int) );
    	memcpy(framesrc->colorModel ,dst->colorModel ,sizeof(char)*4 );
    	memcpy(framesrc->channelSeq ,dst->channelSeq ,sizeof(char)*4 );
    
    	cvReleaseImage(&dst);
    
    	return 0;
    
    }
    

    Wenn es nicht funktionieren sollte sag bescheid.. musste die Funktion aus meinem Project ein bisschen zusammenbastelln, da ich nicht gerade alles hinein stellen wollte.

    Zu den Fps: lass die Anweisung mit fps initialisation einfach weg !

    lowbyte



  • ha, aber mein Code ist etwas kürzer 😉



  • Hi

    Bei meinem Code kannst du auch noch ein Param zu rotierung des Bildes angeben. !

    lowbyte



  • Danke,
    wenn ich mein Bild mit der leider etwas bescheidenen Auflösung in Fullscreen etwas verbessern möchte, gibt es da so etwas wie eine interpolierte Darstellung? Man kennt das ja von den webcams mit der als "interpoliert" angegebenen Auflösung.

    Zudem: ich möchte gerne Schärfe, Kontrast und Helligkeit ändern können. Gibt es hierfür auch einfache Funktionen? (z.B. so schöne einfache Möglichkeiten wie Negativbild erzeugen, Spiegeln,.., was ich einfach super finde bei opencv!).



  • Hi

    Schau dir sonnst mal all die Samples an die im Opencv directory liegen !
    Da sollte für all deine Fragen was dabei sein. Annsonsten mal im Web suchen.

    lowbyte



  • Hi

    Das dürfte dich auch intressieren !

    http://www.heise.de/newsticker/meldung/GTC-CUDA-Unterstuetzung-fuer-OpenCV-1095603.html

    Ich bin gespannt 🙂

    lowbyte



  • Hi

    Noch was, wir sind hier ein bisschen falsch mit dem Thread. Wen du weitere fragen hast, sende mir eine Mail.

    @: f a c e 1 [at] gmx [.] net

    lowbyte


Anmelden zum Antworten