Я думаю, вам следует сделать следующее. Ваше cnts
- это массив точек, важно, чтобы вы нашли способ определить, от каких точек вы хотите измерить расстояния.
Например, может быть крайности? Самые большие и самые маленькие значения x и самые большие и самые маленькие значения y. Или просто точки, которые имеют x1=x2
и y1=y2
. После того, как вы решите, какие точки вы хотите использовать, для выбранных точек просто distance = √ x^2 + y^2
.
Для 1 вам сначала нужно найти центр объекта. Я бы предложил эту ветку: OpenCV Centroid неправильной формы , и тогда вы можете применить те же логики c, которые описаны ниже.
для 2:
#say your contours array looks something like this.
cnts = [(12,12),(13,14),(14,16)...]
Позволяет Допустим, вы выбрали точку 1:
selected_point = cnts[0] #(x,y) = (12,12)
Логически, аналог этого будет иметь одинаковое значение x или y, в зависимости от того, рисуете ли вы линию вертикально или горизонтально. Например, если вы идете горизонтально, у него будет то же значение y. Поэтому ищите в массиве cnts
другую точку со значением y=12
и измерьте расстояния между ними с помощью x1-x2
.