OpenCV中的C++函数fillConvexPoly抛出异常

4
我正在尝试使用fillConvexPoly函数填充遮罩中的三角形,但是我遇到了以下错误。
OpenCV Error: Assertion failed (points.checkVector(2, CV_32S) >= 0) in fillConvexPoly, file /home/iris/Downloads/opencv-3.1.0/modules/imgproc/src/drawing.cpp, line 2256
terminate called after throwing an instance of 'cv::Exception'
 what():  /home/iris/Downloads/opencv-3.1.0/modules/imgproc/src/drawing.cpp:2256: error: (-215) points.checkVector(2, CV_32S) >= 0 in function fillConvexPoly

我这样调用该函数:
cv::Mat mask = cv::Mat::zeros(r2.size(), CV_32FC3);
cv::fillConvexPoly(mask, trOutCroppedInt, cv::Scalar(1.0, 1.0, 1.0), 16, 0);

trOutCroppedInt定义如下:

std::vector<cv::Point> trOutCroppedInt

我将向该向量中添加3个点:

[83, 46; 0, 48; 39, 0]

我该如何纠正这个错误?

请发布一个 [mcve]。这个对我来说完美无缺,可能是你在代码中没有展示的问题。 - Miki
1个回答

4
当遇到points.checkVector(2, CV_32S) >= 0时,可能会出现此错误。这可能是由于数据类型比CV_32S复杂且维数大于二,例如所有数据类型如vector都可能会导致该问题。因此,我们可以按照以下步骤使用fillConvexpoly:
1. 读取图像
cv::Mat src=cv::imread("what/ever/directory");

2. 确定点数 您必须像以下图形中那样确定您的点数。

enter image description here

因此,我们针对这一点的代码如下:
vector<cv::Point> point;
point.push_back(Point(163,146));  //point1
point.push_back(Point(100,148));  //point2
point.push_back(Point(100,110));  //point3
point.push_back(Point(139,110));  //point4

3. 使用 cv::fillConvexPoly 函数

假设有一张图像 src,需要在该图像上绘制一个多边形(使用坐标点表示),则代码如下:

   cv::fillConvexPoly(src,               //Image to be drawn on
                      point,             //C-Style array of points
                      Scalar(255, 0, 0), //Color , BGR form
                      CV_AA,             // connectedness, 4 or 8
                      0);                // Bits of radius to treat as fraction

(因此输出图像如下:之前:左侧 - 之后:右侧)

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接