1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import numpy as np
- import cv2
- def draw_line_heatmap(image_shape, pt1, pt2, sigma=1):
- """
- 根据给定的两个端点生成线段的热度图。
- 参数:
- - image_shape: (height, width) 输出热度图的形状
- - pt1: (x1, y1) 线段的第一个端点
- - pt2: (x2, y2) 线段的第二个端点
- - sigma: 高斯核的标准差,用于控制热度扩散的程度
- 返回:
- - heatmap: 生成的热度图
- """
- # 创建空白热度图
- heatmap = np.zeros(image_shape, dtype=np.float32)
- # 绘制线段
- cv2.line(heatmap, pt1, pt2, color=1, thickness=1)
- # 应用高斯模糊以生成热度效果
- if sigma > 0:
- heatmap = cv2.GaussianBlur(heatmap, (0, 0), sigmaX=sigma, sigmaY=sigma)
- # 归一化热度图
- heatmap = (heatmap - heatmap.min()) / (heatmap.max() - heatmap.min() + 1e-6)
- return heatmap
- # 测试函数
- if __name__ == "__main__":
- # 定义图像尺寸和线段端点
- image_shape = (256, 256) # 图像的高度和宽度
- pt1 = (50, 50) # 第一个端点
- pt2 = (200, 200) # 第二个端点
- sigma = 2 # 控制热度扩散程度
- # 生成热度图
- heatmap = draw_line_heatmap(image_shape, pt1, pt2, sigma)
- # 显示结果
- import matplotlib.pyplot as plt
- plt.imshow(heatmap, cmap='hot', interpolation='nearest')
- plt.colorbar()
- plt.show()
|