Heim >Backend-Entwicklung >C++ >Wie drehe ich ein Bild in OpenCV ohne Zuschneiden?

Wie drehe ich ein Bild in OpenCV ohne Zuschneiden?

DDD
DDDOriginal
2024-11-16 07:42:03845Durchsuche

How to Rotate an Image in OpenCV Without Cropping?

Ein Bild ohne Zuschneiden in OpenCV drehen

Wenn Ihr Ziel darin besteht, ein Bild zu drehen und dabei seinen gesamten Inhalt ohne Zuschneiden beizubehalten, bietet OpenCV dies an eine Lösung. Stellen Sie sich die Situation vor, in der Sie ein Bild traditionell mit cv::warpAffine drehen, nur um am Ende ein beschnittenes Ergebnis zu erhalten. Dieser Artikel befasst sich mit diesem Problem und bietet eine Codelösung.

In unserem Beispiel führt das Drehen des Bildes mit cv::getRotationMatrix2D und die Anwendung mit cv::warpAffine zu einem Bild mit fehlenden Ecken. Um dies zu korrigieren, müssen wir die Transformationsmatrix anpassen, um das verschobene Bildzentrum zu berücksichtigen.

Inspiriert durch Erkenntnisse aus verwandten Quellen nutzt unsere Lösung die folgenden Ideen:

  1. Matrixanpassung: Ändern Sie die Rotationsmatrix, indem Sie eine Übersetzung einbauen, die die neue Bildmitte am Original ausrichtet Mitte.
  2. Gedrehtes Rechteck: Verwenden Sie cv::RotatedRect, um das umgrenzende Rechteck zu bestimmen, das das gedrehte Bild umfasst.

Unser aktualisierter Code (getestet mit OpenCV 3.4 .1):

#include "opencv2/opencv.hpp"

int main() {
    cv::Mat src = cv::imread("im.png", CV_LOAD_IMAGE_UNCHANGED);
    double angle = -45;

    cv::Point2f center((src.cols - 1) / 2.0, (src.rows - 1) / 2.0);
    cv::Mat rot = cv::getRotationMatrix2D(center, angle, 1.0);
    cv::Rect2f bbox = cv::RotatedRect(cv::Point2f(), src.size(), angle).boundingRect2f();
    rot.at<double>(0, 2) += bbox.width / 2.0 - src.cols / 2.0;
    rot.at<double>(1, 2) += bbox.height / 2.0 - src.rows / 2.0;

    cv::Mat dst;
    cv::warpAffine(src, dst, rot, bbox.size());
    cv::imwrite("rotated_im.png", dst);

    return 0;
}

Dieser erweiterte Code behält den gesamten Inhalt des Originalbilds während der Rotation bei und erreicht so erfolgreich unsere Ziel ist es, ein Bild zu drehen, ohne es zu beschneiden.

Das obige ist der detaillierte Inhalt vonWie drehe ich ein Bild in OpenCV ohne Zuschneiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn