Wenn jemand sucht eine nicht rechteckige Maske erstellen und dann es dann einen Blick auf das Bild anzuwenden hier:
Mat& obtainIregularROI(Mat& origImag, Point2f topLeft, Point2f topRight, Point2f botLeft, Point2f botRight){
static Mat black(origImag.rows, origImag.cols, origImag.type(), cv::Scalar::all(0));
Mat mask(origImag.rows, origImag.cols, CV_8UC1, cv::Scalar(0));
vector< vector<Point> > co_ordinates;
co_ordinates.push_back(vector<Point>());
co_ordinates[0].push_back(topLeft);
co_ordinates[0].push_back(botLeft);
co_ordinates[0].push_back(botRight);
co_ordinates[0].push_back(topRight);
drawContours(mask,co_ordinates,0, Scalar(255),CV_FILLED, 8);
origImag.copyTo(black,mask);
return black;
}
„black“ ist das Bild, in dem wir das Ergebnis schließlich erhalten wird durch Ausschneiden der unregelmäßigen ROI aus dem Originalbild.
static Mat black(origImag.rows, origImag.cols, origImag.type(), cv::Scalar::all(0));
Der "Maske" ist eine Matte, als die gleiche Größe des ursprünglichen Bildes initialisiert und mit 0 Mat Maske gefüllt (origImag.rows, origImag.cols, CV_8UC1, cv :: Scalar (0)) ;
Setzen der Koordinaten in GEGEN DEN UHRZEIGERSINN Richtung
vector< vector<Point> > co_ordinates;
co_ordinates.push_back(vector<Point>());
co_ordinates[0].push_back(topLeft);
co_ordinates[0].push_back(botLeft);
co_ordinates[0].push_back(botRight);
co_ordinates[0].push_back(topRight);
nun die Maske zu erzeugen tatsächlich
drawContours(mask,co_ordinates,0, Scalar(255),CV_FILLED, 8);
Am Ende des maskierten Teils/ROI aus dem Originalbild (origImag) kopieren und auf die Anteil der ROI vom Originalbild (unter Verwendung der Maske) in das Bild mit der Bezeichnung "Schwarz"
origImag.copyTo(black,mask);
Wenn Sie die Maske visualisieren möchten, setzen Sie die Werte am besten auf 255 statt auf 1, vorausgesetzt, die Maske wird nur als boolesche Maske verwendet. – zanbri