Jeśli ktoś szuka tworzenia non prostokątną maskę, a następnie zastosować je na obrazie, a następnie spojrzeć tutaj:
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;
}
„czarny” jest obrazem, gdzie będziemy w końcu uzyskać wynik przez przycinanie nieregularnego ROI z oryginalnego obrazu.
static Mat black(origImag.rows, origImag.cols, origImag.type(), cv::Scalar::all(0));
przycisków "maska" jest matą, inicjuje się jako tego samego rozmiaru pierwotnego obrazu i wypełnione 0. mat maski (origImag.rows, origImag.cols, CV_8UC1 CV :: skalarny (0)) ;
Umieszczenie współrzędne w lewo kierunku
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);
Teraz generowania maski faktycznie
drawContours(mask,co_ordinates,0, Scalar(255),CV_FILLED, 8);
Na koniec skopiuj zamaskowaną część/ROI z oryginalnego obrazu (origImag) i wklej na część ROI z oryginalnego obrazu (przy użyciu maski) na obraz o nazwie "czarny"
Dla tych, którzy chcą wizualizować maskę, najlepiej ustawić wartości na '255' zamiast' 1', pod warunkiem, że maska jest używana tylko jako maska boolowska. – zanbri