在OpenCV中绘制多边形
Drawing Polygons in OpenCV?
我哪里做错了?
vector <vector<Point> > contourElement;
for (int counter = 0; counter < contours -> size (); counter ++)
{
contourElement.push_back (contours -> at (counter));
const Point *elementPoints [1] = {contourElement.at (0)};
int numberOfPoints [] = {contourElement.at (0).size ()};
fillPoly (contourMask, elementPoints, numberOfPoints, 1, Scalar (0, 0, 0), 8);
我一直得到const Point部分的错误。编译器说
error: cannot convert 'std::vector<cv::Point_<int>, std::allocator<cv::Point_<int> > >' to 'const cv::Point*' in initialization
我做错了什么?(PS:显然忽略了for循环结束时缺少的括号,因为这只是我代码的一部分)
只是为了记录(并且因为opencv文档在这里非常稀疏)使用c++ API的更精简的代码片段:
std::vector<cv::Point> fillContSingle;
[...]
//add all points of the contour to the vector
fillContSingle.push_back(cv::Point(x_coord,y_coord));
[...]
std::vector<std::vector<cv::Point> > fillContAll;
//fill the single contour
//(one could add multiple other similar contours to the vector)
fillContAll.push_back(fillContSingle);
cv::fillPoly( image, fillContAll, cv::Scalar(128));
让我们分析违规行:
const Point *elementPoints [1] = { contourElement.at(0) };
您声明contourElement
为vector <vector<Point> >
,这意味着contourElement.at(0)
返回vector<Point>
而不是const cv::Point*
。这是第一个错误
最后,您需要做如下操作:
vector<Point> tmp = contourElement.at(0);
const Point* elementPoints[1] = { &tmp[0] };
int numberOfPoints = (int)tmp.size();
后称其为:
fillPoly (contourMask, elementPoints, &numberOfPoints, 1, Scalar (0, 0, 0), 8);
contouelement是vector<Point>
的矢量,而不是Point:)所以不是:
const Point *elementPoints
把
const vector<Point> *elementPoints
有些人可能会因为OpenCV的samples/cpp/create_mask.cpp中明显的错误而到达这里。这样,考虑到上面的解释,我编辑了&;if (event == EVENT_RBUTTONUP)&;分支段落:
...
mask = Mat::zeros(src.size(), CV_8UC1);
vector<Point> tmp = pts;
const Point* elementPoints[1] = { &tmp[0] };
int npts = (int) pts.size();
cout << "elementsPoints=" << elementPoints << endl;
fillPoly(mask, elementPoints, &npts, 1, Scalar(255, 255, 255), 8);
bitwise_and(src, src, final, mask);
...
希望对大家有所帮助。
相关文章:
- 在 QT C++中绘制/操作多边形
- 如何绘制具有随机顶点数量的多边形并旋转它们
- 为什么 OpenGL 不在此代码中绘制多边形?
- 如何在QGraphicsScene上绘制填充多边形
- OpenGL和GLFW:不绘制多边形
- 即使 OpenGL、SDL 和 GLSL 都没有抛出错误,也没有绘制多边形
- 如何在SDL中绘制多边形
- 通过鼠标单击绘制多边形
- 绘制多边形网格时出现 Opengl 性能问题
- 如何在现代openGL中绘制带有三维点的多边形
- 在C++中使用多线程绘制多边形
- OpenGL 不会为不在命名空间中的对象绘制多边形
- c++opengGL:绘制多边形+图像处理内部像素
- 使用 GL_POLYGON 在 OpenGL 中绘制多边形时获得意外输出
- 使用OpenGL在Maya中绘制多边形导线
- 在OpenCV中绘制多边形
- QGraphicsPolygonItem绘制一个打开(非关闭)的多边形
- 在OpenGL中使用多边形绘制2D粗圆弧
- glDrawElements绘制多边形
- 绘制数以千计的多边形与OpenGL VBO