c ++如何在给定一组点的情况下绘制区域?

时间:2018-04-04 09:55:42

标签: c++ opencv

注意:我正在使用C ++进行编码

我有四个不规则形状的点。

cv::Point(myshape[0].x, myshape[0].y) // [  3, 5 ]
cv::Point(myshape[1].x, myshape[1].y) // [ 13, 9 ]
cv::Point(myshape[2].x, myshape[2].y) // [  1, 18]
cv::Point(myshape[3].x, myshape[3].y) // [ 16, 22]

应该是这样的:

enter image description here

我想用给定的4个点绘制一个填充形状的轮廓,以获得像这样的 Mat (当然不包括这些圆角,这就是我的错,忽略这个)

enter image description here

如何通过它的4个角点来绘制这样的填充形状?

注意:每种情况下都会有4个角点。

非常感谢任何帮助。感谢提前一百万,Tempi。

注意:到目前为止我得到的代码(不工作)

Mat myMask;
myMask.setTo(0);

vector<cv::Points> myVector;
for (int i=0; i<4; i++) myVector.push_back(myPoints[i]);
//cv::fillPoly(myMask, myVector, 0, 1, cv::Scalar(255,255,255));
approxPolyDP(myVector, ROI_Poly, 1.0, true);            

1 个答案:

答案 0 :(得分:4)

  

找到我自己的解决方案,这么简单:)

也许稍后有人需要解决方案,所以你去吧

Mat result;
myImage.copyTo(result); // keep the size of the image
result.setTo(0); // Make mask black

vector<cv::Point> ROI_Poly;
approxPolyDP(myVector, ROI_Poly, 1.0, true); // draw contour of myVector points
fillConvexPoly(result, &ROI_Poly[0], ROI_Poly.size(), Scalar(255, 255, 255), 8, 0); // fill drawed contour white


注意:要避免此行发出警告:fillConvexPoly(result, &ROI_Poly[0], ROI_Poly.size(), Scalar(255, 255, 255), 8, 0);

...只需将行更改为:

fillConvexPoly(result, &ROI_Poly[0], (int)ROI_Poly.size(), Scalar(255, 255, 255), 8, 0);