Получить значения координат объекта дефекта

Я нашел контуры и корпус, используя методы OpenCV (C ++) на изображении. И я хочу рисовать дефекты точек. Я нашел дефекты точек по телефону

vector<Vec4i> defects;
convexityDefects(contours, hull, defects);

Есть 4 целых числа каждого дефекта. Какой из них координата х? Я хочу получить координаты точек дефектов. Я нарисую начальные точки черных линий, которые находятся под рукой.

введите описание изображения здесь

2

Решение

Документ о выпуклостиDefects ():

convexityDefects — Выходной вектор дефектов выпуклости. В C ++ и новом интерфейсе Python / Java каждый дефект выпуклости представлен в виде 4-элементного целочисленного вектора (a.k.a. cv::Vec4i): (start_index, end_index, farthest_pt_index, fixpt_depth), где индексы являются индексами, основанными на 0, в исходном контуре начала, конца и самой дальней точки дефекта выпуклости, и fixpt_depth является приближением с фиксированной точкой (с 8 дробными долями) расстояния между самой дальней точкой контура и корпусом. То есть, чтобы получить значение с плавающей точкой глубины будет fixpt_depth/256.0,

Таким образом, каждый дефект выпуклости состоит из нескольких точек, из start_index в end_index в countour параметр convexityDefects(),

0

Другие решения

Вы хотите что-то вроде: Point p = contours[defects[d][2]]


Я процитирую только значимую часть документации:

[…] 4-элементный целочисленный вектор: (start_index, end_index, farthest_pt_index, fixpt_depth), где индексы 0 основанные индексы в исходном контуре дефекта выпуклости […]

Таким образом, возвращаемые значения представляют собой индексы в исходном контуре.

defects[d] представляет dКонтур Затем вы берете его третий член, farthest_pt_index, который находится в defects[d][2], Это целое число является индексом точки в исходном контуре, который является самым дальним от корпуса, то есть нижней стрелкой на чертеже. Его координаты:

Point p = contours[defects[d][2]]
int x = p.x
int y = p.y

И если вы хотите узнать, как далеко эта точка от корпуса, вам придется разделить 4-й элемент на 256: float p_distance = defects[d][3] / 256.0

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector