Данные
Очевидно, что если мы поговорим о обогревах, мы говорим о отображении некоторых данных. Сегодня речь идет о отображении тепломапа на изображении. В этом случае это будет позиция собак в саду. Вы можете прочитать, как получить такую позицию здесь Отказ Подключите точки, и у вас будет какая-то классная система в вашем саду 😎.
Во-первых, я должен признать, что у меня нет собаки. Данные будут сгенерированы случайным образом X и Y позиций.
import numpy as np # 100 random pairs of x and y in range from 0 to 20 data = np.random.randint(0,20,(100,2))
Изображение, чтобы поставить тепловую карту на него
Теперь я буду использовать свой талант немного 😎. Надеюсь, вы сможете увидеть сад здесь.
Загрузить изображение и поставить данные пролив вперед на нем
Давайте использовать OpenCV и добавить некоторые точки. Предположим, что наш сад длиной 20 м. Шкала координат для формирования нашего изображения.
import numpy as np import cv2 data = np.random.randint(0,20,(100,2)) map_img = cv2.imread("HERE PUT PATH TO IMG ON DISC") width, height, _ = map_img.shape for coord in data: x, y = coord x = int(( x / 20 ) * width) y = int(( y / 20 ) * height) cv2.circle( map_img, (x,y), 20, (255,0,0), -1 ) while True: cv2.imshow("map", map_img ) if cv2.waitKey(1) & 0xFF == ord("q"): break cv2.destroyAllWindows()
Хм. Есть некоторые данные, но это трудно проанализировать его. Давайте копать глубже.
Давайте сделаем второе изображение, пустой. Мы поставим наши данные на нее, манипулируйте немного, а затем накладывайте на целевое изображение.
Пустое изображение довольно легко в OpenCV. Просто матрица с нулями.
heatmap_image = np.zeros((height,width,1), np.uint8)
Установка данных на нее такое же, как указано выше. Использовать
. You should be able to display such dots. ![garden](https://github.com/JakubSzwajka/JakubSzwajka.github.io/blob/master/_posts/_images/garden_3.png?raw=true) ### Manipulate them Use ``cv2.distanceTransform()`` for all pixels. It changes pixels value based on distance to the nearest pixel with value 0. So if there is a lot of points in one place, value will be higher. ```python heatmap_image = cv2.distanceTransform(heatmap_image, cv2.DIST_L2, 5)
Достаточно хорошо! Теперь давайте добавим немного цвета. Чтобы сделать более читаемым, в этом примере я умножу каждый пиксель на 2,5. Измените это значение и посмотрите, что происходит. 😉
# here I make those points a bit bigger heatmap_image = heatmap_image * 2.5 heatmap_image = np.uint8(heatmap_image) heatmap_image = cv2.applyColorMap(heatmap_image, cv2.COLORMAP_JET)
Помните, что cv2.distancetransform ()
Измените тип данных немного. Мы должны изменить его обратно в np.uint8.
.
Оверлей
Заключительный этап. Наложение этих двух изображений.
fin_img = cv2.addWeighted(heatmap_image, 0.5, map_img, 0.5, 0)
Мы можем увидеть данные сейчас! Мы можем предположить, что наша собака проводит большую часть времени. 👍.
Попробуйте подключить это с этим пост И вы можете сделать довольно интересную систему камеры 🤔. Вы можете попробовать изменение значений в DistanceTransform ()
слишком. Например, попробуйте разные Дистанционные типы . Они немного изменит вашу тепловую карту.
Оригинал: “https://dev.to/kuba_szw/what-is-the-most-interesting-place-in-the-backyard-make-yourself-a-heatmap-2k7b”