使用matplotlib的cmap(heatmap)动态改变cv2.line线条颜色
最近在做AR方面的研究。
其中教授提了一个小需求,就是想要改变cv2.line线条颜色。
总得来说就是根据一个数据的大小(也就是强度),来改变线条的颜色,数据越大颜色越红。
一开始我是怎么做的呢…
当然是很笨得手动去设定线条的颜色值。
if 200 < data < 300:
color = (40, 255, 0)
if 300 < data:
color = (0, 40, 255)
cv2.line(matdata, lower_neck_point, left_shoulder_point, color, thickness)
对于这种粗鲁的方式,教授当然直接打咩打咩!
提出要用 heatmap的方式来动态改变。
于是经过调查,就总结了这篇文章,其实很简单,在这里做个笔记。
·
1. 导入
seaborn 用来画图,Normalize用来做归一化,cm用来获取颜色参数的rgb值
import seaborn as sns
from matplotlib.colors import Normalize
import matplotlib.cm as cm
2. color map
一些常用的color map。
以输出以下代码的颜色为例:
import numpy as np
import seaborn as sns
x = np.arange(1, 10)
y = np.arange(1, 10).reshape(9, 1)
matrix_xy = x * y
data_matrix = pd.DataFrame(matrix_xy)
这一步的data_matrix如下图:
sns.heatmap(data_matrix, cmap='Blues')
cmap为’Blues’时的效果如下:
同理,
sns.heatmap(data_matrix, cmap='CMRmap')
sns.heatmap(data_matrix, cmap='rainbow')
sns.heatmap(data_matrix, cmap='prism')
上百种,选择自己适用的就好。
3. 实例
回到我自己的代码上来。
data = 25
cmap = cm.get_cmap('rainbow')
norm = Normalize(vmin=20, vmax=30)
rgba = cmap(norm(data))
rgba_r = rgba[0]
rgba_g = rgba[1]
rgba_b = rgba[2]
rgba_a = rgba[3]
rgb_r = int(255 * rgba_r)
rgb_g = int(255 * rgba_g)
rgb_b = int(255 * rgba_b)
bgr_color = rgb_b, rgb_g, rgb_r
print(bgr_color)
cv2.line(matdata, left_elbow_point, left_wrist_point, tuple(bgr_color), thickness1)
其实也可以通过以下代码直接获取int类型的RGBA数据
rgba = cmap(norm(data), bytes=True)
效果如图:
这样就可以动态改变线条的颜色啦。
4. 补充说明
① 如果出现:’TypeError: Scalar value for argument ‘color’ is not numeric’ when using opencv-python drawing a circle,可以参考https://stackoverflow.com/questions/60484383/typeerror-scalar-value-for-argument-color-is-not-numeric-when-using-opencv
②对保持(x,y)值颜色绘制排序的热图感兴趣的话可以参考:https://stackoverflow.com/questions/34071476/plotting-sorted-heatmap-keeping-x-y-value-colors
③从 matplotlib 中的颜色图中获取单个颜色可以参考:
https://stackoverflow.com/questions/25408393/getting-individual-colors-from-a-color-map-in-matplotlib
Original: https://blog.csdn.net/weixin_42922831/article/details/122421402
Author: tamako-
Title: 使用matplotlib的cmap(heatmap)动态改变cv2.line线条颜色
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/765249/
转载文章受原作者版权保护。转载请注明原作者出处!