2015-12-06 5 views
5

Ich versuche Bild zu drehen mitWie weißen Hintergrund zu halten, wenn, indem Winkel, Quell- und Zielbild opencv warpaffine

void rotate(cv::Mat& src, double angle, cv::Mat& dst) 
{ 
    int len = std::max(src.cols, src.rows); 
    cv::Point2f pt(len/2., len/2.); 
    cv::Mat r = cv::getRotationMatrix2D(pt, angle, 1.0); 
    cv::warpAffine(src, dst, r, cv::Size(src.cols, src.rows)); 
} 

verwenden. Die Drehung funktioniert wie folgt.

enter image description here

möchte ich schwarze Bereiche weiß machen. Ich habe versucht mit

cv::Mat dst = cv::Mat::ones(src.cols, src.rows, src.type()); 

vor dem Aufruf drehen, aber keine Änderung im Ergebnis. Wie kann ich das erreichen?

Hinweis: Ich suche eine Lösung, die dies während der Rotation erreichen. offensichtlich, indem schwarze Bereiche nach der Drehung weiß gemacht werden, kann dies erreicht werden.

Antwort

12

Sie wollen die borderMode und borderValue Argumente der warpAffine Funktion verwenden, um dies zu erreichen. Durch Einstellen des Modus auf BORDER_CONSTANT wird ein konstanter Wert für Rahmenpixel (d. H. Außerhalb des Bildes) verwendet, und Sie können den Wert auf den konstanten Wert setzen, den Sie verwenden möchten (d. H. Weiß). Es wäre in etwa so aussehen:

cv::warpAffine(src, dst, r, 
       cv::Size(src.cols, src.rows), 
       cv::INTER_LINEAR, 
       cv::BORDER_CONSTANT, 
       cv::Scalar(255, 255, 255)); 

Weitere Einzelheiten finden Sie in der OpenCV API Documentation.