Если кто-то хочет создать непрямоугольную маску, а затем применить ее к изображению, посмотрите здесь:
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;
}
«черный» — это изображение, где мы, наконец, получим результат, вырезав неправильный ROI из исходного изображения.
static Mat black(origImag.rows, origImag.cols, origImag.type(), cv::Scalar::all(0));
"Маска" представляет собой мат, инициализированный исходным изображением того же размера и заполненный 0. Маска мата(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 );
В конце скопируйте замаскированную часть / ROI из исходного изображения (origImag) и вставьте часть ROI из исходного изображения (используя маску) в изображение с именем «черный».
origImag.copyTo(black,mask);
person
Spandan
schedule
24.12.2017