OpenCv pointPolygonTest. Как предоставить контуры в качестве входных данных? - PullRequest
2 голосов
/ 20 сентября 2011

Я пытался использовать функцию OpenCV:

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

У меня есть контур, заданный 4 точками в 2D (x1, y1), ..., (x4, y4). Я хочу проверить, находится ли точка (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);

Я что-то упустил?

1 Ответ

4 голосов
/ 20 сентября 2011

Функция работает для меня без проблем (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
...