Как определить край объекта с помощью OpenCV - PullRequest
1 голос
/ 29 апреля 2019

Я пытаюсь использовать OpenCV для измерения размера нити (того пластикового материала, который используется для 3D-печати)

Я пытаюсь измерить размер нити (того пластикового материала, который используется для 3D-печати).Идея состоит в том, что я использую светодиодную панель для освещения нити, затем снимаю изображение с камеры, предварительно обрабатываю изображение, применяю детектирование краев и вычисляю его размер.Большинство нитей тонко изготовлены из одного цвета, который легко подвергается предварительной обработке и дает прекрасные результаты.

Проблема связана с прозрачной нитью.Я не могу получить полезные результаты.Я хотел бы попросить небольшой помощи, или если бы кто-то мог подтолкнуть меня в правильном направлении.Я уже пытался обрезать изображение до высоты, которая немного выше, чем у нити накала, и ширину всего в несколько пикселей, а также при расчете размера с использованием количества пикселей в этих изображениях, но это не очень хорошо работало.Так что теперь я здесь и пытаюсь сделать это с обнаружением кромок

  • хорошо работает для нитей одного цвета
  • , не работает для прозрачных нитей

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

Изображения, которые могут помочь понять: https://imgur.com/gallery/CIv7fxY

image = cv.imread("../images/img_fil_2.PNG")  # load image

gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)  # convert image to grayscale

edges = cv.Canny(gray, 100, 200)  # detect edges of image

1 Ответ

0 голосов
/ 29 апреля 2019

Вы можете использовать предположение, что изображения сняты при тех же условиях.

Ваша основная проблема заключается в том, что отражения в прозрачной нити обнаруживаются как края. Но, поскольку изображение относительно простое, без каких-либо других краев, вы можете просто взять верхний и нижний края и измерить расстояние между ними.

Простой способ сделать это состоит в том, чтобы взять 2 вертикальные линии (например, стороны изображения), найти края, которые пересекают линию (в основном пересекают столбец в изображении и найти краевые пиксели), и соединить самые высокие и самые низкие точки сформировать края нити. Это также устраняет искривление нити накала, которое, как я полагаю, не требуется для вашего приложения.

Вы можете использовать 3 или 4 вертикальные линии для устойчивости.

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