2011-09-20 68 views
2

我一直在尝试使用OpenCV的功能:OpenCv pointPolygonTest。如何提供轮廓作为输入?

double pointPolygonTest(InputArray contour, Point2f pt, bool measureDist)

我有4点在2D(X1,Y1)指定的轮廓,...,(X4,Y4)。我想测试Point(x,y)是否在轮廓内部或外部。但我似乎无法找到任何参考如何将轮廓指定为正确的函数输入。

我试过没有得到正确的结果下面的实现:

vector<Point2f> contour; 

contour.push_back(Point2f(x1, y1)); 
contour.push_back(Point2f(x2, y2)); 
contour.push_back(Point2f(x3, y3)); 
contour.push_back(Point2f(x4, y4)); 

int inCont; 
inCont = pointPolygonTest(contour, Point2f(x, y), false); 

我缺少的东西?

回答

4

功能工作对我来说没有任何问题(OpenCV的2.3.1):

vector<Point2f> points; 

points.push_back(Point2f(0,0)); 
points.push_back(Point2f(0,4)); 
points.push_back(Point2f(4,4)); 
points.push_back(Point2f(4,0)); 

cout << pointPolygonTest(points, Point2f(5,1), false) << endl; 
cout << pointPolygonTest(points, Point2f(1,1), false) << endl; 
cout << pointPolygonTest(points, Point2f(0,0), false) << endl; 

输出:

-1 
1 
0 
+0

我错过了可能的-1返回值。这倾向于在测试“if(inCont)”为真之后评估我的条件语句。谢谢你指点我。问题解决了。 – tisch