You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib:压力热力图与传感器点位对齐叠加及实时更新实现

2*8维度压力值传感器位置映射方案

现有条件

  • 印有16个压力传感器(黑点标识)的鞋垫图像
  • 存储各传感器压力值、维度为2*8的numpy数组
  • 压力值每0.1s完成一次实时更新
    示例鞋垫图像

实现目标

  • 在绘图区域背景层显示鞋垫图像
  • 将压力值对应的Heatmap热力图精准叠加到每个压力传感器(黑点)对应位置
  • 每0.1s刷新一次压力值的热力图显示

现存问题

现有代码已实现动态更新热力图与背景图像的叠加效果,但无法调整热力图位置使其与传感器(黑点)对齐。代码中临时使用300*400维度随机数组是因为原始2*8维度压力数组直接显示尺寸过小不可见,当前运行效果存在像素过小、位置偏移问题,需要将2*8维度的压力值映射到对应传感器像素位置,支持热力图扩散覆盖相邻区域。
位置偏移效果参考

核心解决思路

位置错位的本质是热力图数组未与传感器实际像素坐标做绑定,全尺寸硬叠加自然无法对齐黑点位置。解决流程分三步:

  1. 提前标定鞋垫图上16个黑点的像素坐标,建立2*8压力数组索引与实际像素位置的一一映射关系,这是精准对齐的核心
  2. 创建与鞋垫图像尺寸完全一致的空矩阵,将每个传感器的压力值填充到矩阵中对应的坐标点
  3. 对填充后的矩阵做高斯模糊卷积,实现压力值从传感器点向周边区域扩散的热力图效果,解决原生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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 11:42:21