IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 使用matplotlib的cmap(heatmap)动态改变cv2.line线条颜色 -> 正文阅读

[Python知识库]使用matplotlib的cmap(heatmap)动态改变cv2.line线条颜色

使用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')  # heatmap的颜色种类设为rainbow
        norm = Normalize(vmin=20, vmax=30)  # 归一化,将vmin和vmax分别映射到0和1
        rgba = cmap(norm(data))  # norm(data):data对应归一化的数值的百分比,比如25处于20~30这个区间的中间位置,所以norm(data)=0.5,同理30是1.0,20是0.0;rgba:输出的RGBA颜色值
        rgba_r = rgba[0]  # rgba中对应的r通道:红色 (百分数)数据类型:float
        rgba_g = rgba[1]  # rgba中对应的g通道:绿色 (百分数)数据类型:float
        rgba_b = rgba[2]  # rgba中对应的b通道:蓝色 (百分数)数据类型:float
        rgba_a = rgba[3]  # rgba中对应的a通道:透明度 (百分数)数据类型:float
        rgb_r = int(255 * rgba_r)  # rgb中对应的r通道:红色
        rgb_g = int(255 * rgba_g)  # rgb中对应的g通道:绿色
        rgb_b = int(255 * rgba_b)  # rgb中对应的b通道:蓝色
        bgr_color = rgb_b, rgb_g, rgb_r  # 如果要设定Opencv线条的颜色,注意Opencv中cvScalar是CV_RGB的宏,cvScalar的储存顺序是B-G-R
        print(bgr_color)
        cv2.line(matdata, left_elbow_point, left_wrist_point, tuple(bgr_color), thickness1)  # 将bgr_color以元组的形式作为cv2.line的color参数

其实也可以通过以下代码直接获取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

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-11 23:57:03  更:2022-01-11 23:57:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:19:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码