Bild drehen mit OpenCV

  • Hi,

    Ich bin gerade dabei ein Bild zu drehen mittels OpenCV (90 Grad). Das Problem ist wenn es ein Portrait ist und ich es drehe dann verliere ich die Pixel die über die ursprüngliche Bildgrenze hinausgehen. Ich benutze

    Code
    cv2DRotationMatrix(center, angle, scale, rot_mat);

    Gibt es in OpenCV eine schnelle Möglichkeit ein Bild zu drehen und die Borders entsprechend anzupassen oder muss man wirklich


    • das Originalbild in eine größere Matrix kopieren
    • dort zentrieren
    • rotieren
    • neue Eckpunkte berechnen und Bild ausschneiden
    • ein Matrix erstellen die genauso gross ist wie das Bild und reinkopieren.


    Mein Problem klingt so einfach, dass ich nicht glauben kann dass es da nicht eine opencv function dafür gibt? :wein:

    Danke für eure Tipps,
    Andreas

    --
    Glücklicher Absolvent von 933 :wave2:

  • Aus gegebenen Anlass hier der Code für die Rotation mittels OpenCV.

    Code
    // rotate image
            CvPoint2D32f center = cvPoint2D32f(frame->width / 2, frame->height / 2);
            angle = 90;
            scale = 1;
            cv2DRotationMatrix(center, angle, scale, rot_mat);
            // transform
            cvWarpAffine(frame, frame_rot, rot_mat,CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS,     cvScalarAll(0));


    frame und frame_rot sind IPLImages. angle und scale integer. Das gedrehte Bild dann im Image frame_rot.

    Good luck!
    Andreas

    --
    Glücklicher Absolvent von 933 :wave2:

  • hey!

    vielen vielen dank für den post. hat bei mir geklappt, von einer sache abgesehen: das original bild wird um 90° rotiert und im destination bild nicht zentriert dargestellt, sondern irgendwie um ein drittel weiter in die obere ecke gelegt. das destination bild ist ein neu angelegtes iplImage, in den maßen des originalbildes, bloß bereits gedreht.
    woran kann es liegen?? hab schon ganz viel versucht zu lesen und probiert aber klappt irgendwie nicht :(

    danke schonmal :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!