Измерение расстояний между пикселями нерегулярно ограниченного объекта в изображении с Python и OpenCV - PullRequest
0 голосов
/ 06 февраля 2020

Я новичок в обработке изображений и python, но мне интересно измерить расстояние в пикселях для обеих осей (большой и вспомогательной). Благодарность этой ссылке для начальных процедур создания границы и осей (больших и малых).

Я использовал фрагмент в приведенной выше ссылке для создания границы, изменив параметр в от cv2.drawContours(orig, box.astype('int'),-1, (0, 255, 0), 3) до cv2.drawContours(orig, ctns,-1, (0, 255, 0), 3), чтобы получить оси, но не в состоянии измерить расстояние, как требуется. Пожалуйста, помогите мне узнать, как достичь ожидаемых результатов в соответствии с вложениями, учитывая, что расстояние между линией 1 и другой в ограниченном объекте составляет 1 пиксель. Ниже приведены вложения.

  • Исходное изображение

image

  • Полученные результаты

Results

  • Ожидаемые результаты

Expected Results

1 Ответ

0 голосов
/ 06 февраля 2020

Я думаю, вам следует сделать следующее. Ваше 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...