OpenCV Получить ближайший контур до точки

Я просто пишу функцию, чтобы получить контур объекта, который ближе всего к точке. Я думаю, это не так сложно, но я не знаю, почему я не могу использовать sqrt в этой функции. и результат, который я получил, довольно странный, а не тот, который, как предполагалось.

void FindContour(Mat a,Mat &image){
 Mat temp; 
 int x=0, y=0;
 int i;
 int largest=65535;
 a.copyTo(temp); 
 vector< vector<point> > contours; 
 vector<vec4i> hierarchy; 
 findContours(temp,contours,hierarchy,CV_RETR_CCOMP,CV_CHAIN_APPROX_NONE ); 
 for (int index = 0; index >= 0; index = hierarchy[index][0]) { 
 Moments moment = moments(contours[index]);
 ****** area = moment.m00; 
 int a = moment.m10/area; 
 int b = moment.m01/area; 
 i=std::sqrt((a-50)^2+(b-60)^2); 
 if (i</vec4i></point>
2 ответа

i=std::sqrt((a-50)^2+(b-60)^2);
 ^^^^^^^^^^^^^^^^^

Поскольку a, b определены как int s, результат (a-50)^2+(b-60)^2 также будет int. Это сделает программу двусмысленной, чтобы выбрать, какой std::sqrt использовать.

Чтобы выработать, вы можете сначала применить его к float перед вызовом этой функции. Как это:

i=std::sqrt((float) ((a-50)^2+(b-60)^2));


Вы можете использовать cv :: pointPolygonTest для вычисления точки-многоугольника.

licensed under cc by-sa 3.0 with attribution.