【发布时间】:2016-09-12 20:28:18
【问题描述】:
我在 python 中有一个代码,我正在将它移植到 c++。我在 OpenCV c++ 中遇到了 drawContours 函数的一个奇怪问题。
self.contours[i] = cv2.convexHull(self.contours[i])
cv2.drawContours(self.segments[object], [self.contours[i]], 0, 255, -1)
这是python中的函数调用,厚度参数的值-1用于填充轮廓,结果如下所示
我在 c++ 中做的完全一样,
cv::convexHull(cv::Mat(contour), hull);
cv::drawContours(this->objectSegments[currentObject], cv::Mat(hull), -1, 255, -1);
但这是生成的图像:
(请仔细查看convexhull 点,这不容易看到)。我只得到点而不是填充的多边形。我也尝试过使用fillPoly 之类的,
cv::fillPoly(this->objectSegments[currentObject],cv::Mat(hull),255);
但没有帮助。 请帮助我解决问题。我确信我错过了一些非常微不足道但无法发现的东西。
【问题讨论】:
-
请显示完整的代码。变量
hull的类型是什么。问题在于参数的结构方式——它应该是一个轮廓向量。在您的情况下,似乎每个点都被解释为一个单独的轮廓。 -
@DanMašek Perfect!,您的建议奏效了。我直接使用向量点的向量。