Так что это должно быть прямолинейно, но я не очень хорошо знаком с OpenCV.
Может ли кто-нибудь предложить метод измерения расстояния в пикселях (красная линия), как показано на изображении ниже? Желательно, чтобы у него были некоторые параметры, такие как ширина измерения (как показано в конце и начале красной линии) или что-то в этом роде. Этот тип измерения очень распространен в программном обеспечении, таком как ImageJ, я могу представить, что это должно быть несколько тривиально, чтобы сделать это в OpenCV.
Я также хотел бы взять несколько образцов по ширине изображения.
Приветствует
Я использую openCV и узнаю об этом
Простой способ найти ширину канала будет следующим:
distance = []
h = img.shape[0]
for j in range(img.shape[1]):
line_top = 0
line_bottom = img.shape[0]
found_top = False
found_bottom = False
for i in range(h):
if img[i,j,0] > 0 and not found_top:
line_top = i
found_top = True
if img[h-i-1,j,0] > 0 and not found_bottom:
line_bottom = h-i
found_bottom = True
if found_top and found_bottom:
distance.append(line_bottom-line_top)
break
Но это приведет к тому, что расстояние будет учитывать очень маленькие белые пятнышки.
Для решения есть несколько вариантов:
opencv
morphological transformation
.opencv
gaussian filter
или аналогичного.Другим решением было бы применить opencv's findContours
.
Добавлено opencv
три раза для @Marek R.
Спасибо за предложение, в итоге я использовал это предложение частично в сочетании с ответом Марека, см. комментарий в его ответе.
Ваша задача довольно проста.
Обратите внимание, что при таком подходе изображение не обязательно должно быть прямым. У вас будут линейные уравнения, которыми вы должны манипулировать с умом. Если эти две линии параллельны, то существует простая формула для определения расстояния между ними. Если они не идеально параллельны, вы должны принять это во внимание и использовать информацию об области изображения, чтобы получить среднее расстояние.
Спасибо, это было очень полезно. В итоге я использовал этот подход, чтобы найти несколько линий, затем я получил среднюю точку линии и перпендикулярный наклон, чтобы получить функцию перпендикулярной линии. Затем повторяйте эту функцию, пока снова не будут найдены черные пиксели.
Вы знаете, что это вопрос об OpenCV?