Создание ограничивающих рамок из данных тепловой карты - PullRequest
3 голосов
/ 16 октября 2019

У меня есть данные тепловой карты для проекта обнаружения транспортных средств, над которым я работаю, но я не знаю, куда идти дальше. Я хочу нарисовать обобщенную ограничивающую рамку вокруг «самых горячих» частей изображения. Моей первой мыслью было нарисовать прямоугольник над всеми частями, которые перекрываются, но что-то подсказывает мне, что есть более точный способ сделать это. Любая помощь будет оценена! К сожалению, моя репутация не позволяет мне публиковать изображения. Вот как я создаю тепловую карту:

# Positive prediction window coordinate structure: ((x1, y1), (x2, y2))
def create_heatmap(bounding_boxes_list):
     # Create a black image the same size as the input data
     heatmap = np.zeros(shape=(375, 1242))
     # Traverse the list of bounding box locations in test image
     for bounding_box in bounding_boxes_list:
          heatmap[bounding_box[0][1]:bounding_box[1][1], bounding_box[0][ 0]:bounding_box[1][0]] += 1

return heatmap

Вот ссылка на мою тепловую карту

Вот общее представление о том, что у меня было вум

1 Ответ

0 голосов
/ 17 октября 2019

Порог Оцу и обнаружение контура на двоичном изображении должны это сделать. Использование этого снимка экрана без линий оси:

enter image description here

enter image description here

import cv2

# Grayscale then Otsu's threshold
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

# Find contours
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
    x,y,w,h = cv2.boundingRect(c)
    cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 2)

cv2.imshow('thresh', thresh)
cv2.imshow('image', image)
cv2.waitKey()
...