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

标签 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);            

最佳答案

Found the solution on my own, so simple :)

也许以后有人需要解决方案,所以给你

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);

关于c++如何在给定一组点的情况下绘制区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49648058/

相关文章:

c++ - 为什么我的线程被一个没有被任何东西占用的关键部分阻塞?

c++ - 当我在我的 xcode 项目中使用 #include <OpenGL/gl.h> 行时,它在哪里寻找 gl.h 文件?

python - 我如何告诉 python3 寻找正确的模块?

java - 如何有效地找到单个像素值随时间变化的标准偏差? (来自视频源)

python - 如何让OpenCV保存分析后的视频的最后几秒钟

c++ - 来自文件错误的 Win32 LoadImage()

c++ - 表达式不是整数常量表达式

opencv - 在 OpenCV 上获取屏幕大小

python - 两个进程之间的IPC示例,opencv(cv::Mat对象)c++作为服务器,python作为客户端

c++ - 在 pthread_create 中使用仿函数