Heim >Backend-Entwicklung >C++ >Wie drehe ich ein Bild in OpenCV ohne Zuschneiden?
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:
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!