test_linemap.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import numpy as np
  2. import cv2
  3. def draw_line_heatmap(image_shape, pt1, pt2, sigma=1):
  4. """
  5. 根据给定的两个端点生成线段的热度图。
  6. 参数:
  7. - image_shape: (height, width) 输出热度图的形状
  8. - pt1: (x1, y1) 线段的第一个端点
  9. - pt2: (x2, y2) 线段的第二个端点
  10. - sigma: 高斯核的标准差,用于控制热度扩散的程度
  11. 返回:
  12. - heatmap: 生成的热度图
  13. """
  14. # 创建空白热度图
  15. heatmap = np.zeros(image_shape, dtype=np.float32)
  16. # 绘制线段
  17. cv2.line(heatmap, pt1, pt2, color=1, thickness=1)
  18. # 应用高斯模糊以生成热度效果
  19. if sigma > 0:
  20. heatmap = cv2.GaussianBlur(heatmap, (0, 0), sigmaX=sigma, sigmaY=sigma)
  21. # 归一化热度图
  22. heatmap = (heatmap - heatmap.min()) / (heatmap.max() - heatmap.min() + 1e-6)
  23. return heatmap
  24. # 测试函数
  25. if __name__ == "__main__":
  26. # 定义图像尺寸和线段端点
  27. image_shape = (256, 256) # 图像的高度和宽度
  28. pt1 = (50, 50) # 第一个端点
  29. pt2 = (200, 200) # 第二个端点
  30. sigma = 2 # 控制热度扩散程度
  31. # 生成热度图
  32. heatmap = draw_line_heatmap(image_shape, pt1, pt2, sigma)
  33. # 显示结果
  34. import matplotlib.pyplot as plt
  35. plt.imshow(heatmap, cmap='hot', interpolation='nearest')
  36. plt.colorbar()
  37. plt.show()