2014-06-06 11 views
7

Aus meinen Experimenten liefert, der Winkel von RotatedRect der Winkelgröße zurück geht von -90 bis 0 Grad, die, wenn das Objekt zu bestimmen, nicht ausreichen, um nach links oder nach rechts gelehnt.OpenCV des RotatedRect Winkel nicht genügend Informationen

Zum Beispiel, wenn der Winkel -45 Grad ist, können wir nicht sagen, wenn wir 45 oder -45 Grad drehen müssen es entzerren.

Ein Auszug aus dem Code Ich verwende:

RotatedRect rotated_rect = minAreaRect(contour); 
float blob_angle_deg = rotated_rect.angle; 
Mat mapMatrix = getRotationMatrix2D(center, blob_angle_deg, 1.0); 

das Objekt in einer Richtung Schiefe I Winkel von 0 bis -90 Grad zu erhalten, während das Objekt in der anderen Richtung lehnt ab ich Winkel - 90 bis 0 Grad.

Wie finde ich den Winkel, mit dem ich mein Bild drehen sollte es entzerren?

Antwort

12

Nachdem er von Sebastian Schmitz und Michael Burdinov Lernen beantwortet diese ist, wie ich es gelöst:

RotatedRect rotated_rect = minAreaRect(contour); 
float blob_angle_deg = rotated_rect.angle; 
if (rotated_rect.size.width < rotated_rect.size.height) { 
    blob_angle_deg = 90 + blob_angle_deg; 
} 
Mat mapMatrix = getRotationMatrix2D(center, blob_angle_deg, 1.0); 

in der Tat, RotatedRect ist also Winkel genügend Informationen nicht zur Verfügung stellen eines Objekts Winkel zu kennen, müssen Sie auch RotatedRect die Nutzung size.width und size.height.

3

Werte der Breite und Höhe des Rechtecks ​​Schalt ist das gleiche, wie es um 90 Grad dreht. Wenn der Winkelbereich also 180 statt 90 wäre, hätte das Rechteck 2 Darstellungen (Breite, Höhe, Winkel) und (Höhe, Breite, Winkel + 90). Mit einem Bereich von 90 Grad können Sie jedes Rechteck darstellen und Sie können das nur auf eine Art tun.

3

ich erklärt, wie Sie den Winkel des Rechtecks ​​in [0-180] in this thread umwandeln kann.

Der Winkel wird entlang der längeren Seite immer berechnet.

Verwandte Themen