Matplotlib:压力热力图与传感器点位对齐叠加及实时更新实现
2*8维度压力值传感器位置映射方案
现有条件
- 印有16个压力传感器(黑点标识)的鞋垫图像
- 存储各传感器压力值、维度为
2*8的numpy数组 - 压力值每0.1s完成一次实时更新

实现目标
- 在绘图区域背景层显示鞋垫图像
- 将压力值对应的Heatmap热力图精准叠加到每个压力传感器(黑点)对应位置
- 每0.1s刷新一次压力值的热力图显示
现存问题
现有代码已实现动态更新热力图与背景图像的叠加效果,但无法调整热力图位置使其与传感器(黑点)对齐。代码中临时使用300*400维度随机数组是因为原始2*8维度压力数组直接显示尺寸过小不可见,当前运行效果存在像素过小、位置偏移问题,需要将2*8维度的压力值映射到对应传感器像素位置,支持热力图扩散覆盖相邻区域。
核心解决思路
位置错位的本质是热力图数组未与传感器实际像素坐标做绑定,全尺寸硬叠加自然无法对齐黑点位置。解决流程分三步:
- 提前标定鞋垫图上16个黑点的像素坐标,建立
2*8压力数组索引与实际像素位置的一一映射关系,这是精准对齐的核心 - 创建与鞋垫图像尺寸完全一致的空矩阵,将每个传感器的压力值填充到矩阵中对应的坐标点
- 对填充后的矩阵做高斯模糊卷积,实现压力值从传感器点向周边区域扩散的热力图效果,解决原生
2*8数组显示过小的问题
修正后可运行代码
import matplotlib.pyplot as plt import numpy as np import time from scipy.ndimage import gaussian_filter # --------------- 配置参数 需根据实际场景调整 --------------- # 鞋垫图像本地路径 IMG_PATH = r"..\Desktop\Example_image.PNG" # 2行8列传感器的像素坐标,格式为(纵坐标y, 横坐标x),索引与压力数组完全对应 # 以下为示例坐标,需根据实际图片的黑点位置修改 SENSOR_COORDS = np.array([ [(110, 75), (115, 122), (118, 168), (122, 210), (125, 252), (127, 295), (128, 338), (130, 375)], [(230, 72), (232, 120), (235, 165), (237, 208), (238, 250), (240, 292), (242, 335), (245, 372)] ]) # 热力图扩散半径,数值越大扩散范围越广 BLUR_SIGMA = 22 # 热力图图层透明度 HEATMAP_ALPHA = 0.6 # 热力图数值范围,根据实际压力传感器量程调整 VMIN, VMAX = 0, 1 # -------------------------------------------------------- # 读取背景鞋垫图 bg_img = plt.imread(IMG_PATH) img_h, img_w = bg_img.shape[:2] # 初始化绘图层 fig, ax = plt.subplots() ax.imshow(bg_img) # 底层绘制鞋垫原图 # 初始化热力图图层 init_heatmap = np.zeros((img_h, img_w)) heatmap_layer = ax.imshow(init_heatmap, alpha=HEATMAP_ALPHA, cmap='jet', vmin=VMIN, vmax=VMAX) plt.show(block=False) # 实时刷新循环 for _ in range(100): time.sleep(0.1) # 此处替换为实时采集的2*8维度真实压力值 pressure_values = np.random.random((2, 8)) # 重置热力图矩阵 current_heatmap = np.zeros((img_h, img_w)) # 将压力值映射到对应传感器坐标 for row in range(2): for col in range(8): y, x = SENSOR_COORDS[row, col] current_heatmap[y, x] = pressure_values[row, col] # 高斯模糊实现热力扩散效果 current_heatmap = gaussian_filter(current_heatmap, sigma=BLUR_SIGMA) # 刷新图层数据 heatmap_layer.set_data(current_heatmap) fig.canvas.draw() fig.canvas.flush_events()
调试提示:首次运行时先打印鞋垫图像的尺寸,对照图片逐点标记16个黑点的像素坐标填入
SENSOR_COORDS即可实现完全对齐;调整BLUR_SIGMA参数可控制热力图的扩散范围,修改cmap参数可更换热力图配色方案。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

