OpenCV - обнаруживает только определенную строку в изображении - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь выделить одну строку на следующем изображении, я знаю несколько методов, таких как CannyEdge Detection, которые могут обнаружить все строки на изображении, но я пытаюсь найти только интересующую меня строку. .

Любая информация об инструментах в OpenCV, которая может помочь с этим, будет принята с благодарностью. enter image description here

Цель состоит в том, чтобы обнаружить верхний красный контур суд (который я выделил синим цветом)

enter image description here

1 Ответ

2 голосов
/ 10 февраля 2020

В Python / OpenCV вы можете установить пороговое значение для красного цвета линии, а затем получить самый большой контур или контуры, превышающие некоторый порог в области, как показано ниже.

Ввод:

enter image description here

import cv2
import numpy as np

# read image as grayscale
img = cv2.imread('red_line.png')

# threshold on red color
lowcolor = (0,0,75)
highcolor = (50,50,135)
thresh = cv2.inRange(img, lowcolor, highcolor)


# apply morphology close
kernel = np.ones((5,5), np.uint8)
thresh = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

# get contours and filter on area
result = img.copy()
contours = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = contours[0] if len(contours) == 2 else contours[1]
result = img.copy()
for c in contours:
    area = cv2.contourArea(c)
    if area > 5000:
        cv2.drawContours(result, [c], -1, (0, 255, 0), 2)


# show thresh and result    
cv2.imshow("thresh", thresh)
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

# save resulting images
cv2.imwrite('red_line_thresh.png',thresh)
cv2.imwrite('red_line_extracted.png',result)


Изображение с порогом:

enter image description here

Результирующий контур:

enter image description here

...