Рубрики
Без рубрики

Сделайте себя тепломапором 🐕🦺

Данные Очевидно, что если мы поговорим о обогревах, мы говорим о отображении некоторых данных. Сегодня это … Помечено Python, 5days5blogposts, OpenCV, ImageProcessing.

Данные

Очевидно, что если мы поговорим о обогревах, мы говорим о отображении некоторых данных. Сегодня речь идет о отображении тепломапа на изображении. В этом случае это будет позиция собак в саду. Вы можете прочитать, как получить такую позицию здесь Отказ Подключите точки, и у вас будет какая-то классная система в вашем саду 😎.

Во-первых, я должен признать, что у меня нет собаки. Данные будут сгенерированы случайным образом 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”