Как получить длинную грань между черным и белым порогами?

Используя OpenCv, я преобразовал зеленые области в белые (255) и черные (0): см. ТЕКУЩИЙ ВЫВОД.

Использование обнаружения ребер Канни, Лапласа и Собеля дало много маленьких ребер вместо длинного согласованного ребра, см. Пример CANNY EDGE.

Как я могу добиться одного длинного края, как показано на желаемом выходе?

Соответствующий код:

image = cv.imread('grass pic.jpg')
lane_image = np.copy(image)
pic = cv.cvtColor(lane_image ,cv.COLOR_BGR2RGB)

lower = np.array([24,0,0])
upper = np.array([177, 194, 20])

green_selection = cv.inRange(pic, lower, upper)
canny= cv.Canny(green_selection,50,150)

plt.imshow(canny, cmap='gray')

введите здесь описание изображения

ТЕКУЩИЙ ВЫХОД:

Текущий вывод

CANNY EDGE Пример

Осторожная грань

ЖЕЛАЕМЫЙ РЕЗУЛЬТАТ:

Желаемый результат


person user13174343    schedule 15.03.2021    source источник


Ответы (1)


Преобразование изображения в цветовое пространство HSV может помочь вам обнаружить нужную линию.

import cv2
import numpy as np

image = cv2.imread("image.png")
HSV = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

low = np.array([23, 98, 0])
high = np.array([253, 255, 255])

mask = cv2.inRange(HSV, low, high)
cv2.imshow("mask", mask)
cv2.imwrite("mask.png", mask)

result = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow("result", result)
cv2.imwrite("result.png", result)

cv2.waitKey(0)
cv2.destroyAllWindows()
Mask Image Result Image
enter image description here enter image description here
person Vatsal Parsaniya    schedule 15.03.2021