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



  • 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



  • Hi

    Nochwas, versuche herauszufinden mit was für Auflösungen deine Cam zurecht kommt!
    Meine Macht sogar auflösungen über 3000x2000 mit !
    Du hast gesagt du hättest eine 2 MEgapixel (Trust Widescreen HD Webcam 16530)!?
    Die mag vielleicht widescreen Auflösungen lieber 😉 solltest das mal testen !

    lowbyte



  • Nö, verschiedene Auflösungen getestet.

    Aber: leider habe ich noch nichts gefunden, wie man die Schärfe des Bildes verbessern könnte.
    Jemand eine Idee oder Link?

    Zudem: kennt jemand eine Möglichkeit, die Auflösung zu interpolieren um damit ein besseres Bild zu bekommen?



  • Hi

    Versuche die neuste Version von opencv zu compilieren.
    Der Rest ist eigentlich alles schön dokumentiert.

    lowbyte



  • Hi

    Habe leider momentan nicht so viel Zeit für ausfürliche Posts... viel Arbeit 😉

    Schärfe :

    http://opencv-users.1802565.n2.nabble.com/Sharpen-in-OpenCV-td4266815.html

    lowbyte



  • Habe opencv 2.1 endlich ohne Fehlermeldungen im Borland Builder6.
    Jedoch beendet sich meine Anwendung, sobald die Anweisung kommt:

    capture = cvCaptureFromCAM(deviceid);
    

    Dies geschieht mit deviceid = -1 oder 0
    Mit 1 kommt wenigstens ein leeres Fenster und die Anweisung

    cvQueryFrame(capture)
    

    liefert 0.

    ???


Anmelden zum Antworten