gpt4 book ai didi

用于屏幕坐标和频率字典的 Python 热图

转载 作者:太空宇宙 更新时间:2023-11-04 02:56:06 24 4
gpt4 key购买 nike

只是为了好玩,我正在尝试编写一个鼠标跟踪脚本,我的基本部分可以正常工作,但我在热图方面绝对没有运气。

我的初始代码是通过 PIL 保存图像(只是为了检查它是否正常工作),这很好,但显然它只是单个点。然后我尝试实现我自己的热图,但发现它需要半年多的时间来处理一些非常基本的东西,所以这也行不通。

我一直在尝试不同的 matplotlib 示例,但我刚刚意识到“热图”在这种情况下意味着不同的东西。

enter image description here

这不是不起作用,但也绝对不是我希望看到的结果。我想知道是否有人知道我实际上是如何获得其他类型的热图的,从哪里得到热 Blob ?我一直在谷歌上搜索一堆术语,但它似乎又回到了同样的 3 个左右的问题。

数据存储在 {(x, y): frequency} 的字典中,所以为了得到上面的结果我使用了这段代码(matplotlib 部分来自 Plotting a 2D heatmap with Matplotlib ):

import matplotlib.pyplot as plt

resolution = (1920, 1080)

total = []
for y in range(resolution[1]):
row = []
for x in range(resolution[0]):
try:
row.append(data[(x, y)])
except KeyError:
row.append(0)
total.append(row)

plt.imshow(total, cmap='hot', interpolation='nearest')
plt.show()

它的速度并不重要,因为它将与跟踪分开进行,我只是想要最初能工作的东西。

编辑:为了稍微澄清一下(如果不清楚,请见谅),我想要这样的东西: enter image description here

最佳答案

我绘制此类热图的解决方案如下。使用 data[(x, y)] 的数据很容易填充 2D numpy 数组,然后使用 plot 函数。请注意,您可以使用任何您喜欢的颜色图,我使用代码中提供的那个。该示例应该开箱即用。

使用高斯模糊可以实现“ Blob ”外观。您可以调整 sigma 以使其更锐利或更平滑。

import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import numpy as np

import scipy.ndimage.filters as filters


def plot(data, title, save_path):
colors = [(0, 0, 1), (0, 1, 1), (0, 1, 0.75), (0, 1, 0), (0.75, 1, 0),
(1, 1, 0), (1, 0.8, 0), (1, 0.7, 0), (1, 0, 0)]

cm = LinearSegmentedColormap.from_list('sample', colors)

plt.imshow(data, cmap=cm)
plt.colorbar()
plt.title(title)
plt.savefig(save_path)
plt.close()

if __name__ == "__main__":
w = 640
h = 480

data = np.zeros(h * w)
data = data.reshape((h, w))

# Create a sharp square peak, just for example
for x in range(300, 340):
for y in range(300, 340):
data[x][y] = 100

# Smooth it to create a "blobby" look
data = filters.gaussian_filter(data, sigma=15)

plot(data, 'Sample plot', 'sample.jpg')

P.S. cmap='jet' 还提供了开箱即用的所需外观。

关于用于屏幕坐标和频率字典的 Python 热图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42316089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com