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

news2024/10/7 14:23:02

文章目录

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

概要

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

读取图像

首先,我们来读取样例图像,并对其进行相应的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 Image


def 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_path
    img.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 np

def 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 np

def 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.coloradmin.cn/o/1234135.html

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

相关文章

基于nodejs学校宿舍管理系统-计算机毕设 附源码45118

nodejs学校宿舍管理系统 摘要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对学校宿舍管理系统等…

问题:vue2+elementui,tabs切换显示表格并设置表格选中行高亮失败

错误示范: 1.直接setCurrentRow失败(this.currentRow是之前保存的表格当前选中行的数据) this.$refs.table.setCurrentRow(this.currentRow);2.以为是表格没生成就执行了setCurrentRow导致设置不成功,所以使用了this.$nextTick&…

自动化物流运输设备模组要选择哪种类型?

在自动化物流运输设备中,选择合适的模组类型取决于具体的运输需求和应用场景。 1、同步带模组:同步带模组是一种低噪音、低成本的物流运输设备,适用于中短距离、轻型货物的运输。它采用同步带传动的方式,具有传动准确、运行稳定、…

类和对象学习笔记

类和对象 类的定义this指针类的6个默认成员函数构造函数析构函数拷贝构造函数赋值运算符重载赋值运算符重载运算符重载const成员 取地址操作符重载const取地址操作符重载 初始化列表explicit关键字static成员匿名对象友元内部类拷贝对象时编译器的优化 类的定义 c类的定义形式…

leetcode:1773. 统计匹配检索规则的物品数量(python3解法)

难度:简单 给你一个数组 items ,其中 items[i] [typei, colori, namei] ,描述第 i 件物品的类型、颜色以及名称。 另给你一条由两个字符串 ruleKey 和 ruleValue 表示的检索规则。 如果第 i 件物品能满足下述条件之一,则认为该物…

yum仓库

目录 什么是yum仓库 概念 yum的实现过程 Yum的实现过程如下: yum的配置文件 仓库设置文件 日志文件 yum命令 yum list 显示所有可用的包,包名,支持通配符 yum list*Kernel yum info 显示包的信息 yum search ftp 查…

Linux应用开发基础知识——网络通信编程(九)

前言: 通过学习为后续Linux网络编程奠定基础。首先介绍网络编程的概念,即网络协议分层,旨在帮助读者对网络建立初步的、全面立体的认识,其次介绍包括协议、端口、地址等;最后介绍应用非常广泛的传输控制协议&#xff0…

口袋参谋:找关键词的三种方法!

​如何找热搜关键词?99%的商家都不知道。那么今天可以根据我说的三种方法去做。 第一种方法:利用竞争对手 通过分析竞争对手,正在使用和采取何种优化方法,来帮助你理解市场上正在流行什么样的关键字,这些热词可以直接从…

[Mac软件]Downie 4.6.34视频下载工具

以下是关于Downie软件的介绍: Downie是一款非常实用的视频下载软件,专门为Mac用户设计。这款软件的使用方法非常简单,只需要将想要下载的视频链接复制到Downie的界面,它就能够自动下载。 Downie最大的特点就是支持的网站非常多&a…

labelImg

labelImg 在anaconda虚拟环境中安装labelImg 进入conda虚拟环境DL2中 输入命令: pip install PyQt5 pip install pyqt5-tools pip install lxml pip install labelimg PyQt5:是用于创建GUI应用程序的跨平台工具包,它将Python与Qt库融为一体 Lxml&#…

重磅解读 | 阿里云 云网络领域关键技术创新

云布道师 10 月 31 日,杭州云栖大会,阿里云技术主论坛带来了一场关于阿里云主力产品与技术创新的深度解读,阿里云网络产品线负责人祝顺民带来《云智创新,网络随行》的主题发言,针对阿里云飞天洛神云网络(下…

CentOS8部署Skywalking(非容器方式)

一、官网下载安装包 二、安装 #tar -zxf apache-skywalking-apm-9.6.0.tar.gz #mv apache-skywalking-apm-9.6.0 skywalking #cd /opt/skywalking 修改配置文件 #vi /opt/skywalking/config/application.yml #vi vi /opt/skywalking/webapp/application.yml 三、运行 ./bin…

inBuilder低代码平台新特性推荐-第九期

各位知乎的友友们,大家好~ 今天来给大家带来的是inBuilder低代码平台特性推荐系列第九期——子表弹出新增! 01 概述 子表弹出新增,是低代码平台提供的一种前端输入组件,在子表字段较多的场景中,有时为了方便…

【Linux】 find命令使用

find find命令是一种通过条件匹配在指定目录下查找对应文件或者目录的工具。匹配的条件可以是文件名称、类型、大小、权限属性、时间戳等。find命令还可以配合相关命令对匹配到的文件作出后续处理。 语法 find [路径...] [表达式] [path...]为需要查找文件所指定的路径。如果…

【GUI】-- 12 贪吃蛇小游戏之让小蛇动起来

GUI编程 04 贪吃蛇小游戏 4.3 第三步:让小蛇动起来(键盘控制) 首先,在构造器中要获取焦点事件、键盘监听事件并加入定时器(定时器定义需要实现ActionListener接口并重写actionPerformed方法): //构造器public GamePanel() {init();this.s…

后端-锁专题:synchronized(java对象结构、锁的类型、锁升级流程...)

文章目录 对象的结构以及大小内存换算java的常见数据类型以及所占字节数分析对象总共占多少字节,各项占多少字节对象头结构 锁类型锁升级流程 对象的结构以及大小内存换算 java的常见数据类型以及所占字节数 String:8字节 64位 int:4字节 …

虾皮选品免费工具:如何用知虾进行虾皮市场分析选品

在如今的电商时代,了解市场需求和选择热销产品是成功经营的关键。虾皮作为东南亚地区最大的电商平台之一,提供了一系列的选品工具,帮助卖家在市场竞争中脱颖而出。本文将介绍如何使用虾皮的免费工具——知虾进行虾皮市场分析选品,…

MS90C386:+3.3V 175MHz 的 24bit 平板显示器(FPD)LVDS 信号接收器

产品简述 MS90C386 芯片能够将 4 通道的低压差分信号( LVDS )转换成 28bit 的 TTL 数据。时钟通道与数据通道并行输入。在时钟频率 为 175MHz 时, 24bit 的 RGB 数据、 3bit 的 LCD 时序数据和 1bit 的控制数据以 1225Mb…

竞赛 题目:基于深度学习的图像风格迁移 - [ 卷积神经网络 机器视觉 ]

文章目录 0 简介1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 简介 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习卷积神经网络的花卉识别 该项目较为新颖,适合作为竞赛课题方向&#xff0c…

真菌DAP-seq|丝状真菌中与碳利用相关的调控和转录景观

转录因子 (Transcription Factors, TFs)是指能够以序列特异性方式结合DNA并且调节转录的蛋白质。TF与特异性DNA序列结合调节转录,同时会和其它功能蛋白结合调控下游基因的转录和翻译过程,也会和增强子等其它顺式作用元件结合,使整个调控过程更…