Jika seseorang ingin membuat topeng non-persegi panjang dan kemudian menerapkannya pada gambar, lihat di sini:
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;
}
"hitam" adalah gambar yang pada akhirnya kita akan memperoleh hasilnya dengan memotong ROI yang tidak beraturan dari gambar aslinya.
static Mat black(origImag.rows, origImag.cols, origImag.type(), cv::Scalar::all(0));
"Mask" adalah Mat, diinisialisasi dengan ukuran yang sama dengan gambar asli dan diisi dengan 0. Mat mask(origImag.rows, origImag.cols, CV_8UC1, cv::Scalar(0));
Meletakkan koordinat pada arah ANTICLOCKWISE
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);
Sekarang sebenarnya menghasilkan topeng
drawContours( mask,co_ordinates,0, Scalar(255),CV_FILLED, 8 );
Pada akhirnya salin bagian bertopeng/ROI dari gambar asli (origImag) dan tempelkan bagian ROI dari gambar asli (menggunakan topeng) ke dalam gambar yang diberi nama "hitam"
origImag.copyTo(black,mask);
person
Spandan
schedule
24.12.2017