Ограничительные рамки для отдельных контуров, кроме одного цвета - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть изображение, как показано ниже

enter image description here

Я хочу добавить ограничивающие рамки для каждой из областей, как показано на пи c ниже используя OpenCV & Python

enter image description here

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

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

1 Ответ

1 голос
/ 10 апреля 2020

Если я понимаю, что вы хотите, вот один из способов в Python / OpenCV.

  • Чтение ввода
  • Преобразование в серый
  • Порог в черный и белый
  • Поиск внешних контуров и их ограничивающих рамок
  • Нарисуйте прямоугольники ограничивающей рамки на копии ввода
  • Сохраните результаты

Ввод :

enter image description here

import cv2
import numpy as np

# read image
img = cv2.imread('white_green.png')

# convert to grayscale
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# threshold
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY)[1]\

# get contour bounding boxes and draw on copy of input
contours = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
contours = contours[0] if len(contours) == 2 else contours[1]
result = img.copy()
for c in contours:
    x,y,w,h = cv2.boundingRect(c)
    cv2.rectangle(result, (x, y), (x+w-1, y+h-1), (0, 0, 255), 1)

# view result
cv2.imshow("threshold", thresh)
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

# save result
cv2.imwrite("white_green_thresh.jpg", thresh)
cv2.imwrite("white_green_bboxes.jpg", result)


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

enter image description here

Ограничительные рамки:

enter image description here

...