OpenCV - Как нарисовать линию внутри контура? - PullRequest
1 голос
/ 25 января 2020

Я работаю над проектом DIY 3D Scanner. Я буду использовать довольно распространенный алгоритм для этого.
См. Здесь: https://lesagegp.wordpress.com/2013/12/04/laser-scanning-explained/
Я полностью понял алгоритм и написал код для него. Все, что мне теперь нужно сделать, это обработать изображения. Я сделал пару снимков для тестирования. Вот один из них: enter image description here

И мне удалось найти контуры лазера с очень простым кодом:

image = cv2.imread("frame/1.png")
image = cv2.flip(image, 1)
hsv_frame = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
low_red = np.array([161, 155, 84])
high_red = np.array([179, 255, 255])
red_mask = cv2.inRange(hsv_frame, low_red, high_red)
contour = cv2.findContours(red_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)[0]
draw_it = cv2.drawContours(image, contour, -1, (0, 255, 0), 3)

cv2.imshow("contour",draw_it)

Результат: enter image description here

И сейчас все, что я хочу сделать, это нарисовать ломаную линию или что-то в этом роде внутри контура или внутреннего края контура. Как синяя линия в этом примере: enter image description here

Есть ли способ сделать это и взять координаты этой линии? Заранее спасибо.

1 Ответ

2 голосов
/ 25 января 2020

Давайте начнем с немного урезанной версии вашего контурного изображения - которую я случайно сгенерировал другими способами, потому что ваш код не работал на моей OpenCV версии:

enter image description here

Я бы тогда прочитал это как оттенки серого и использовал бы skimage function medial_axis(), чтобы найти медиальную ось, подобную этой:

import cv2
from skimage.morphology import medial_axis

# Load your trimmed image as greyscale
image = cv2.imread("a.png", cv2.IMREAD_GRAYSCALE)

# Find medial axis
skeleton = medial_axis(image).astype(np.uint8)

# Save
cv2.imwrite("result.png", skeleton*255)

enter image description here

Ключевые слова : обработка изображений, Python, OpenCV, лыжное изображение, scikit-изображение, медиальная ось, скелет, скелетонизация.

...