Heim > Artikel > Backend-Entwicklung > Wie können Punkte mithilfe von Perspektivtransformationen und affinen Transformationen korrigiert werden?
Perspektivtransformation für die Schräglagenkorrektur
Um mithilfe der Perspektivtransformation einen Schräglageneffekt auf eine Reihe von Punkten zu erzielen, ist es wichtig, Folgendes zu verstehen:
Punktreihenfolge:
Die Reihenfolge der Punkte ist in der Perspektive wichtig Transformation. Um die Genauigkeit zu gewährleisten, muss die Reihenfolge sowohl im Quell- als auch im Zielvektor konsistent sein.
Bildgröße:
Wenn Sie möchten, dass das resultierende Bild nur das Objekt von enthält Stellen Sie bei Bedarf Breite und Höhe so ein, dass sie mit den Abmessungen des resultierenden Rechtecks übereinstimmen.
Leistung Überlegungen:
Für affine Transformationen wie Drehen, Größenänderung und Ausrichtung ist es effizienter, die affinen Gegenstücke zu verwenden:
Affin Transformieren:
getAffineTransform() erfordert nur drei Punkte und stellt eine 2x3-Matrix bereit, während warpAffine() die Verzerrung durchführt.
Größenänderung des resultierenden Bildes:
Um die Größe des resultierenden Bildes auf eine andere Größe als die Eingabe zu ändern, verwenden:
cv::Size size(box.boundingRect().width, box.boundingRect().height); cv::warpPerspective(src, dst, size, ... );
Beispiel:
vector<Point> not_a_rect_shape; not_a_rect_shape.push_back(Point(408, 69)); not_a_rect_shape.push_back(Point(72, 2186)); not_a_rect_shape.push_back(Point(1584, 2426)); not_a_rect_shape.push_back(Point(1912, 291)); RotatedRect box = minAreaRect(cv::Mat(not_a_rect_shape)); Point2f pts[4]; box.points(pts); Point2f src_vertices[3]; src_vertices[0] = pts[0]; src_vertices[1] = pts[1]; src_vertices[2] = pts[3]; Point2f dst_vertices[3]; dst_vertices[0] = Point(0, 0); dst_vertices[1] = Point(box.boundingRect().width-1, 0); dst_vertices[2] = Point(0, box.boundingRect().height-1); Mat warpAffineMatrix = getAffineTransform(src_vertices, dst_vertices); cv::Size size(box.boundingRect().width, box.boundingRect().height); warpAffine(src, rotated, warpAffineMatrix, size, INTER_LINEAR, BORDER_CONSTANT);
Das obige ist der detaillierte Inhalt vonWie können Punkte mithilfe von Perspektivtransformationen und affinen Transformationen korrigiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!