注意:我用 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]
Run Code Online (Sandbox Code Playgroud)
应该是这样的:
我想画它的轮廓与给定4点的填充形状获得垫像这样的(当然不包括这些圆角,那是我的错,忽略此):
我怎样才能通过它的 4 个角点来绘制这样的填充形状?
注意:在每种情况下都会有 4 个角点。
任何帮助将不胜感激。提前一百万,坦皮。
注意:到目前为止我得到的代码(不工作)
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);
Run Code Online (Sandbox Code Playgroud)
小智 5
我自己找到了解决方案,很简单:)
也许有人稍后需要解决方案,所以你去吧
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
Run Code Online (Sandbox Code Playgroud)
注意:为了避免在这一行出现警告: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);
| 归档时间: |
|
| 查看次数: |
671 次 |
| 最近记录: |