【OpenCV实现图像:OpenCV利用Python创作热力图】

文章目录

    • 概要
    • 读取图像
    • 图像灰度化
    • **像素化效果**
    • 小结

概要

热力图是一种强大的统计图表,通过对数据进行色彩映射,直观展示了数据分布的热度和密度。在绘制热力图时,关键在于指定颜色映射的规则,这决定了图中不同数值的呈现方式。通常,较大的数值以深色或偏暖的色彩表示,而较小的数值则以浅色或偏冷的色彩呈现,从而使观察者能够迅速理解数据的相对大小和趋势。

读取图像

首先,我们来读取样例图像,并对其进行相应的crop操作。
样例代码如下:


import numpy as np
import matplotlib.pyplot as plt
import skimage.io as io
img = plt.imread("img_2.png")
# crop
img_cut = img[0:400,:,:]
plt.figure()
plt.imshow(img_cut)
plt.show()

在这里插入图片描述

图像灰度化

由于热力图主要用于可视化二维矩阵,所以我们需要将彩色图转化为灰度图,代码如下:


import numpy as np
import matplotlib.pyplot as plt
import skimage.io as io
img = plt.imread("img_2.png")
# crop
img_cut = img[0:400,:,:]
plt.figure()
plt.imshow(img_cut)
plt.show()
from skimage.color import rgb2gray
gray_img = rgb2gray(img_cut)
plt.imshow(gray_img,cmap='gray')
plt.show()

在这里插入图片描述

像素化效果

像素化效果是一种图像处理技术,旨在赋予图像一种艺术化的像素化外观。该操作的关键步骤是将图像划分为非重叠的块,块的大小决定了最终像素化效果的粒度。通常,块的尺寸越大,图像看起来越像是由像素块组成。

from PIL import Imagedef pixelate(image_path, pixel_size):# 打开图片img = Image.open(image_path)# 获取图片的宽度和高度width, height = img.size# 计算每个像素块的大小pixel_size = max(1, pixel_size)block_size = (width // pixel_size, height // pixel_size)# 缩小图像,然后放大回原始大小,实现像素化效果img = img.resize(block_size, resample=Image.NEAREST)img = img.resize((width, height), resample=Image.NEAREST)# 保存处理后的图像output_path = "pixelated_" + str(pixel_size) + "_" + image_pathimg.save(output_path)# 使用例子
image_path = "img_2.png"
pixel_size = 10
pixelate(image_path, pixel_size)

在这里插入图片描述

热力图绘制

继处理灰度图和像素化之后,我们将进一步绘制热力图。热力图是通过色彩映射展示数据分布的一种方式,我们将使用Seaborn库绘制热力图,并以图像的像素块作为数据点。

首先,我们需要安装Seaborn库,可以使用以下命令:

pip install seaborn

接下来,我们将使用处理过的灰度图像进行热力图绘制:

import seaborn as sns
import matplotlib.pyplot as plt
from PIL import Image
import numpy as npdef heatmap_from_image(image_path, pixel_size):# 打开处理后的图片img = Image.open("pixelated_" + str(pixel_size) + "_" + image_path)# 将图像转为NumPy数组img_array = np.array(img)# 创建热力图plt.figure(figsize=(10, 8))sns.heatmap(img_array[:, :, 0], cmap="viridis", cbar=False)# 设置图像标题和坐标轴标签plt.title("Heatmap from Pixelated Image")plt.xlabel("X-axis")plt.ylabel("Y-axis")# 显示热力图plt.show()# 使用例子
heatmap_from_image("img_2.png", 10)

此代码将像素化的图像转换为NumPy数组,并使用Seaborn库绘制热力图。我们使用viridis颜色映射,您可以根据需要选择其他颜色映射。

热力图调色板

Seaborn库提供了丰富的调色板选项,允许您自定义热力图的颜色样式。在上面的代码中,我们使用了viridis调色板,如果您想尝试其他调色板,只需修改cmap参数即可。例如,我们将代码中的"cmap"参数改为"coolwarm",效果如下:

import seaborn as sns
import matplotlib.pyplot as plt
from PIL import Image
import numpy as npdef heatmap_with_custom_palette(image_path, pixel_size, palette_name):# 打开处理后的图片img = Image.open("pixelated_" + str(pixel_size) + "_" + image_path)# 将图像转为NumPy数组img_array = np.array(img)# 创建热力图plt.figure(figsize=(10, 8))sns.heatmap(img_array[:, :, 0], cmap=palette_name, cbar=False)# 设置图像标题和坐标轴标签plt.title(f"Heatmap with {palette_name} Palette")plt.xlabel("X-axis")plt.ylabel("Y-axis")# 显示热力图plt.show()# 使用例子
heatmap_with_custom_palette("img_2.png", 10, "coolwarm")

通过修改palette_name参数,您可以使用Seaborn支持的不同调色板,如"coolwarm"、"viridis"等。

小结

热力图是一种强大的数据可视化工具,通过色彩映射直观展示数据的分布和密度。在创建热力图时,我们通过图像处理的方式,包括图像裁剪、灰度化和像素化,为数据准备了合适的基础。通过结合图像处理和数据可视化的方法,能够更生动地呈现数据的特征,使得分析和理解变得更加直观。这一过程不仅仅适用于图像数据,还可以用于其他二维数据的热力图绘制,为数据分析提供了更多的可能性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/159620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab 一些画图法总结(持续更新)

*****************************************画Dmd_L极坐标表示法**************************************** if(~exist(Dmd_L_array)) Dmd_L_array []; end Dmd_L_array [Dmd_L_array; Dmd_L]; thetaangle(Dmd_L_array); rabs(Dmd_L_array); polarplot(theta,r,o); *****…

【教程】ACM 模式输入输出 C++

目录 输入输出输入单个数字 or 字符输入单行数列输入单行字符串输入多行符号列&#xff0c;已知行数和列数 字符串处理删除字符串中的某个字符 / 子串find()erase() 输入字符串并分割到 vector\<string> 中getline()stringstream示例 快速排序其他 输入输出 输入单个数字…

渗透实例------2个星期艰难的渗透纪实

2个星期艰难的渗透纪实 kyo327 入侵原因,需删一帖子,目标用www.111.com代替,前期通过初期的网站文件暴力猜解,扫描到robots.txt这个文件,有以下目录。如图1: 图1 再通过对这些文件的访问,从3gadm.php文件的标题栏得到该网站采用的是diy-page8.3的cms,自然可以先用搜索…

导购APP、淘客查券机器人与淘客系统:全面对比与选择

导购APP、淘客机器人与淘客系统&#xff1a;全面对比与选择 在互联网购物的时代&#xff0c;导购APP、淘客机器人和微赚淘客系统成为了消费者们的三大重要工具。它们各具优势&#xff0c;但也存在一些问题。本文将为您详细对比这三种工具&#xff0c;帮助您在购物时做出最合适…

Android JNI 异常定位(2)—— addr2line

Android native报错有时候只有一句 signal 11 (SIGSEGV)&#xff0c;这种情况仅通过log是很难定位到问题的。不过Android 在/data/tombstones目录保存了错误的堆栈信息&#xff0c;为定位bug提供了路径。不过一般这里的log都无法像java一样直接定位的出错的行数。如下图&#x…

2023做车载测试真的可以远离内耗!转行车载月入20K!

2023年&#xff0c;车载测试正处于一个发展阶段&#xff0c;随着新能源汽车的蓬勃发展&#xff0c;电气化、智能化逐渐成为发展趋势。在汽车开发过程中&#xff0c;测试是非常重要的一个环节。现在软件越来越多地被应用到汽车上&#xff0c;对软件测试的需求也越来越多、越来越…

Linux上使用ldapsearch命令通过AD GC查询指定用户

一&#xff0c;前言 需要你对Microsoft AD ,AD GC有一定的了解&#xff0c;并且AD要启用了GC。特别是要弄懂&#xff0c;林和域的关系,你才能明白GC在他俩之间的关系。 GC中文名&#xff1a;全局编录 会将你林下所有域的所有对象存储在一个目录里面&#xff0c;但是并没有存储…

数据库数据恢复—MongoDB数据库文件拷贝出现错误的数据恢复案例

MongoDB数据库数据恢复环境&#xff1a; 一台Windows Server操作系统的虚拟机&#xff0c;虚拟机上部署有MongoDB数据库。 MongoDB数据库故障&检测&#xff1a; 在未关闭MongoDB服务的情况下&#xff0c;工作人员将MongoDB数据库文件拷贝到其他分区&#xff0c;然后将原数…

力扣:175. 组合两个表(Python3)

题目&#xff1a; 表: Person ---------------------- | 列名 | 类型 | ---------------------- | PersonId | int | | FirstName | varchar | | LastName | varchar | ---------------------- personId 是该表的主键&#xff08;具有唯一值的列&#…

js进阶笔记之原型,原型链

目录 1、原型对象 constructor 属性 对象原型 2、原型链 3、instanceof 4、原型继承 1、原型对象 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次调用就可以了。 面向对象是把事务分解成为…

音频采集的相关基础知识

本文引注: https://zhuanlan.zhihu.com/p/652629744 1.麦克风的种类 (1)模拟麦克风 ECM麦克风&#xff1a;驻极体电容麦克风(ECM)&#xff0c;典型的汽车ECM麦克风是一种将ECM单元与小型放大器电路整合在单个外壳中的装置。放大器提供一个模拟信号&#xff0c;其电压电平允许…

软件工程理论与实践 (吕云翔) 第十一章: 软件编程课后习题及其答案解析

第十一章&#xff1a; 软件编程 1.判断题 &#xff08;1&#xff09;C语言是一种纯面向对象语言。&#xff08;&#xff09; &#xff08;2&#xff09;进行程序设计语言的选择时&#xff0c;首先考虑的是应用领域。&#xff08;√&#xff09; &#xff08;3&#xff09;良…

JavaScript 如何拷贝对像(Object)或者数组(Array)

目录 JavaScript数据拷贝类型 浅拷贝 深拷贝 举例&#xff1a; 浅拷贝 数组 对象 深拷贝 lodash cloneDeep使用示例 自定义深拷贝方法示例 JSON.parse() 和 JSON.stringify()使用示例 JavaScript数据拷贝类型 浅拷贝 数组可以使用Array.prototype.slice()方法 …

JS实现数字千分位分割(手写纯享版)

简介 在前端开发中&#xff0c;我们经常需要对数字进行格式化&#xff0c;其中一种常见的需求就是将数字表示为千分位格式&#xff0c;以提高可读性。本文将介绍如何使用 JavaScript 实现一个简单而有效的千分位格式化函数。 千分位格式化的需求 千分位格式化是一种将数字中…

python实现鼠标实时坐标监测

python实现鼠标实时坐标监测 一、说明 使用了以下技术和库&#xff1a; tkinter&#xff1a;用于创建GUI界面。pyperclip&#xff1a;用于复制文本到剪贴板。pynput.mouse&#xff1a;用于监听鼠标事件&#xff0c;包括移动和点击。threading&#xff1a;用于创建多线程&…

PWM实验

PWM相关概念 PWM:脉冲宽度调制定时器 脉冲&#xff1a;方波信号&#xff0c;高低电平变化产生方波 周期&#xff1a;高低电平变化所需要时间 频率&#xff1a;1s钟可以产生方波个数 占空比&#xff1a;在一个方波内&#xff0c;高电平占用的百分比 宽度调制&#xff1a;占…

AI:86-基于深度学习的街景图像地理位置识别

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新中,…

Leetcode:622. 设计循环队列 题解【具详细】

目录 一、题目&#xff1a; 二、思路详解&#xff1a; 1.循环队列的存储定义 2.循环队列的创建 3.循环队列的判空与判断情况 (1) 循环队列的判空: (2) 循环队列的判满 4.循环队列元素的插入 5.循环队列元素的删除 6.获取队头元素 7.获取队尾元素 8.循环队列释放 三…

打不开clickonce问题解决过程

1.用户电脑user文件夹下有xx和xx.1两个账户,原先安装在xx账户下,后修了电脑原数据保留在xx.1,新创建XX,之后clickonce就打不开了表现为没有反应,,删除注册表和appdata都只能正常安装,但是不能打开,没有任何报错,发现在我的电脑下打开有这样的提示,,在用户电脑上没有 尝试通过修…

大家为什么开始配置长效IP代理?长效IP代理有什么优势?

随着网络技术的发展&#xff0c;越来越多的人开始关注网络安全和隐私保护。其中&#xff0c;长效IP代理作为一种安全、高效的解决方案&#xff0c;受到了越来越多人的关注。本文将探讨大家为什么开始配置长效IP代理&#xff0c;以及长效IP代理的优势。 一、长效IP代理的优势1.保…