我有这张图片
我想创建一个转折蒙版以仅获得该区域
但是使用以下代码,我得到了这个结果
Moments mu = moments(red,true);
Point center;
center.x = mu.m10 / mu.m00;
center.y = mu.m01 / mu.m00;
circle(red, center, 2, Scalar(0, 0, 255));
cv::Size sz = red.size();
int imageWidth = sz.width;
int imageHeight = sz.height;
Mat mask3(red.size(), CV_8UC1, Scalar::all(0));
// Create Polygon from vertices
vector<Point> ptmask3(3);
ptmask3.push_back(Point(imageHeight-1, imageWidth-1));
ptmask3.push_back(Point(center.x, center.y));
ptmask3.push_back(Point(0, red.rows - 1));
vector<Point> pt;
approxPolyDP(ptmask3, pt, 1.0, true);
// Fill polygon white
fillConvexPoly(mask3, &pt[0], pt.size(), 255, 8, 0);
// Create new image for result storage
Mat hide3(red.size(), CV_8UC3);
// Cut out ROI and store it in imageDest
red.copyTo(hide3, mask3);
imshow("mask3", hide3);
答案 0 :(得分:0)
更新版本(在DanMašek的帮助下)
这是因为您要初始化大小为3的向量,然后再将另外三个点放入向量中,总共6个点,其中三个点具有默认值。尝试以下方法:
vector<Point> ptmask3;
此外,请确保点的坐标正确。您可能希望在左下角有一个点,但是您当前的三角形似乎没有这样的一个点。
您需要像这样正确初始化hide3
:
cv::Mat hide3(img.size(), CV_8UC3, cv::Scalar(0));