我有一个要绘制的轮廓列表。这些轮廓中的一些相交。
当我想用OpenCV绘制它们时,我只需要使用cv::drawContours
函数。
但是,这种行为很奇怪。
这是官方documentation的报价
C++: void drawContours(InputOutputArray image, InputArrayOfArrays contours, int contourIdx, const Scalar& color, int thickness=1, int lineType=8, InputArray hierarchy=noArray(), int maxLevel=INT_MAX, Point offset=Point() )
Parameters:
contourIdx – Parameter indicating a contour to draw. If it is negative, all the contours are drawn.
因此,从文档中,如果我想绘制所有用黑色填充的区域,则只需执行以下操作:
cv::drawContours(this->mask.raw,
this->areas, -1,
cv::Scalar(0,0,0),
cv::FILLED);
但是,这给了我以下输出:
在这里,我们可以清楚地看到我的所有区域都不是黑色的。
但是,如果我遍历我的区域列表并为每个区域调用
cv::drawContours
:unsigned int i = 0;
for (const auto& area : this->areas)
cv::drawContours(this->mask.raw,
this->areas, i++,
cv::Scalar(0,0,0),
cv::FILLED);
我得到的输出与第一个输出完全不同:
我错过了文档中的某些内容吗?有人可以向我解释
cv::drawContours
的行为,对所有区域都调用ojit_code,对每个区域每次调用都有什么区别? 最佳答案
我认为当您将contourIdx
传递为Negative时,我认为drawContour
函数只是绘制轮廓而不会像CV_FILLED
所示那样填充。通过显式循环每个轮廓,您将获得与您一样的结果。