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



  • 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.

    ???



  • hi

    ich tippe auf ein treiber problem. installiere mal den treiber der cam..nur denn treiber.!

    lowbyte



  • Jawohl! Eine andere Cam, für die ein Treiber installiert werden muss, funktioniert.
    Für die andere Cam jedoch (Trust 16530) wird kein Treiber installiert (gibt auch wohl keinen dazu, zumindest bei Trust).
    Aber ohne Treiber funktioniert opencv nicht.
    Gibt es dafür einen Standardtreiber, den man installieren muss?



  • hi

    ist mir leider nicht bekannt! aber gibt es glaube ich auch nicht.. ausser der von ms.

    und dein os ist?

    lowbyte



  • hi

    meine natürlich den usb treiber von ms.

    lowbyte



  • Habe WinXP



  • Auflösung jedenfalls ändert sich jetzt auch.
    Aber: wenn ich mir das Webcambild hole u. möchte danach die Bildauflösung ändern, dann geht das nur, wenn

    cvSetCaptureProperty(capture ,CV_CAP_PROP_FRAME_WIDTH , width);
        cvSetCaptureProperty(capture ,CV_CAP_PROP_FRAME_HEIGHT , height);
    

    NACH

    capture = cvCreateCameraCapture(deviceid);
    

    und VOR

    cvQueryFrame(capture)
    

    kommen muss.


Anmelden zum Antworten