python 颜色_如何使用python中matplotlib库分析图像颜色

80fbdbe3e2738a54e94292b42832666e.png

  用代码分析图像可能很困难。你如何使代码“理解”图像的上下文?

  通常,使用AI分析图像的第一步 是找到主要颜色。在如何使用python中matplotlib库分析图像颜色中,我们将使用matplotlib的 image类在图像中找到主色 。查找主导色也是你可以使用第三方API进行的操作,但是我们将构建自己的系统来执行此操作,以便我们可以完全控制该过程。

  我们将首先研究将图像转换为矩阵形式的其组成颜色,然后对它执行k均值聚类以找到主要颜色。

  先决条件

如何使用python中matplotlib库分析图像颜色假定你了解Python的基础知识,但你以前无需使用Python处理图像。

如何使用python中matplotlib库分析图像颜色基于以下内容:

  1)Python版本3.6.5

  2)matplotlib版本2.2.3:解码图像并可视化主色

  3)scipy版本1.1.0:执行确定主导颜色的聚类

  软件包 matplotlib , scipy 可以通过软件包管理器安装 pip。你可能需要在虚拟环境中安装特定版本的软件包, 以确保与正在处理的其他项目的依赖项没有冲突。

f96f025096a7b172e9c4bfef6241ab4c.png

  此外,我们将在如何使用python中matplotlib库分析图像颜色中分析JPG图像,仅当你安装其他包装枕头时,该支持才可用。

22556a76443c84e693a69ce462f61734.png

  另外,你也可以只使用Jupyter笔记本。如何使用python中matplotlib库分析图像颜色的代码在Anaconda 1.8.7版的Jupyter笔记本上运行。以上这些程序包已预先安装在Anaconda中。

2ebf9cfd58c8e07fbd2a9151c65f1be4.png

  解码图像

  图像可能具有各种扩展名-JPG,PNG,TIFF很常见。这篇文章只关注JPG图片,但是其他图片格式的处理应该不会有太大不同。该过程的第一步是读取图像。

  具有JPG扩展名的图像作为点列表(称为像素)存储在内存中。甲 像素,或一个图像元素,表示的图像中的一个点。点的颜色由三个值的组合确定-它的三个分量颜色(红色,蓝色和绿色)。像素的颜色本质上是这三种颜色的组合。

758d342f370314bf548f86b9d2761c80.png

  让我们使用下面的图片来查找图像中的主色。你可以在此处下载图像 。

  要在Python中读取图像,你需要导入 (documentation)image 类 。 图像类的 方法将图像解码为其RGB值。该方法的输出 是一个尺寸为M x N x 3的数组,其中M和N是图像的尺寸。matplotlibimread()imread()

9eeefa406d0eb6aa2856d39be55ed448.png

  你可以使用的 类的 imshow() 方法 来显示图像,该图像采用RGB值矩阵的形式。Matplotlib pyplot

4a4f790cce7bfad29845e6cdbb1c74f3.png

  我们从该imread() 方法获得的矩阵取决于所读取图像的类型。例如,PNG图像还将包含一个用于测量像素透明度的元素。这篇文章将只涵盖JPG图片。

  在继续对图像进行聚类之前,我们需要执行其他步骤。在找出图像的主要颜色的过程中,我们不关心像素的位置。因此,我们需要将M x N x 3矩阵转换为三个单独的列表,其中包含各自的红色,蓝色和绿色值。以下代码段将存储在图像中的矩阵转换为三个单独的列表,每个列表的长度为40,000(200 x 200)。

1c9ecaf49f2e22c69f8295fe46f7cb42.png

  上面的代码段创建三个空列表,然后通过我们的图像的每个像素循环,附加的RGB值,以我们的 r, g和 b 分别列出。如果正确完成,则每个列表的长度将为40,000(200 x 200)。

  集群基础

  现在我们已经存储了图像的所有组成色,是时候找到主要颜色了。现在让我们花一点时间来了解聚类的基本知识,以及它如何帮助我们找到图像中的主要色彩。

  聚类是一项有助于根据特定属性将相似项目分组在一起的技术。我们将对 上面刚刚创建的三种颜色的列表应用 k均值聚类。

  每个聚类中心的颜色将反映聚类所有成员的属性的平均值,这将有助于我们确定图像中的主要颜色。

  有几种主要颜色?

  在我们对像素数据点执行k均值聚类之前,对并非所有图像都具有相同数量的主色,找出一个给定图像理想的聚类可能对我们来说是一件好事。

  由于我们正在处理三个用于聚类的变量-像素的红色,蓝色和绿色值-我们可以在三个维度上可视化这些变量,以了解可能存在多少种主色。

  要在中制作3D图 matplotlib,我们将使用 Axes3D() 类(文档)。使用Axes3D() 该类初始化轴后,我们使用该 scatter 方法,并将三个颜色值列表用作参数。

fe23f3d3affa018a02f8f80881229e3f.png

  在结果图中,我们可以看到点的分布形成了两个拉长的簇。通过查看它,我们可以看到图像主要由两种颜色组成,这一事实也支持了这一点。因此,在下一节中,我们将重点介绍创建两个群集。

  首先,尽管如此,我们可能会猜测3D图可能无法为某些图像生成不同的聚类。另外,如果我们使用的是PNG图像,则将有第四个拼合度(每个像素的透明度值),这将使得无法在三个维度上进行绘制。在这种情况下,你可能需要使用 弯头方法来确定理想的群集数。

  在SciPy中执行聚类

  在上一步中,我们确定需要两个聚类,现在可以对数据执行k-均值聚类了。让我们创建一个Pandas数据框来轻松管理变量。

85ee0f4756393de872280ec701185022.png

  使用SciPy进行k均值聚类的过程实质上涉及三个步骤:

  1)通过将每个数据点除以其标准偏差来标准化变量。我们将使用该类的 whiten() 方法 vq。

  2)使用该kmeans() 方法生成集群中心 。

  3)使用类的vq() 方法 为每个数据点生成群集标签 vq。

  上面的第一步确保每个变量的变化均等地影响聚类。想象一下两个尺度差异很大的变量。如果我们忽略上面的第一步,那么规模和变化较大的变量将对簇的形成产生更大的影响,从而使过程产生偏差。如何使用python中matplotlib库分析图像颜色因此,我们使用whiten() 函数将变量标准化 。该 whiten() 函数采用一个参数,变量值的列表或数组,然后返回标准化值。标准化后,我们将打印数据框的样本。请注意,标准化列中列的变化已大大减少。

17b18ab3134089597a5f0d1edb2c29d4.png

  下一步是使用标准化列执行k均值聚类。我们将使用kmeans() 执行聚类的 功能。的 kmeans() 功能(文档)具有两个参数-的意见和簇的数目。它返回两个值-聚类中心和变形。失真是每个点与其最近的群集中心之间的距离平方的总和。在如何使用python中matplotlib库分析图像颜色中,我们不会使用失真。

52393a60314651dca110464a331fafcb.png

  k均值聚类的最后一步是生成聚类标签。但是,在本练习中,我们不需要这样做。我们仅在寻找由聚类中心表示的主色。

  显示主要颜色

  我们已经执行了k均值聚类并生成了聚类中心,所以让我们看看它们包含哪些值。

f0b2c4fd84efd65fc1c78502f848dc10.png

  如你所见,我们得到的结果是 RGB值的标准化版本。为了获得原始颜色值,我们需要将它们与标准偏差相乘。

  我们将使用的 类imshow() 方法 以调色板的形式显示颜色。但是,要显示颜色, 需要RGB值在0到1的范围内,其中1表示我们原始RGB值比例中的255。因此,我们必须将群集中心的每个RGB分量除以255,以获得0到1之间的值,并通过该方法显示它们 。matplotlibpyplotimshow()imshow()

  最后,在使用imshow()函数(文档)绘制颜色之前,我们还要多加考虑 。聚类中心的尺寸为N x 3,其中N是聚类数。 imshow() 最初旨在显示颜色的AXB矩阵,因此需要3D尺寸为A x B x 3的数组(调色板中每个块包含三个颜色元素)。因此,我们需要通过将聚类中心的颜色作为单个元素的列表传递,将N x 3矩阵转换为1 x N x 3矩阵。例如,如果我们将颜色存储在其中, colors 则需要[colors] 作为参数传递 给 imshow()。

  让我们探索图像中的主要色彩。

56f5fb820c4132b86463e5609612a535.png

  不出所料,图像中看到的颜色与我们开始使用的图像中的突出颜色非常相似。也就是说,你可能已经注意到上面的浅蓝色实际上并未出现在我们的源图像中。请记住,聚类中心是每个聚类中所有像素的所有RGB值的均值。因此,最终的聚类中心实际上可能不是原始图像中的颜色,而只是RBG值位于聚类中心,即图像中所有看起来相似的像素。

  结论

  在如何使用python中matplotlib库分析图像颜色中,我们逐步研究了如何使用matplotlib 和查找Python中图像的主色 scipy。我们从JPG图像开始,然后使用imread() 中的图像类方法 将其转换为RGB值 matplotlib。然后,我们使用进行k均值聚类, scipy 以找到主要颜色。最后,我们使用imshow()中的pyplot 类 方法 显示了主色 matplotlib。

相关推荐

IT互联网职业培训:大数据分析R语言RStudio使用教程​zhuanlan.zhihu.com
IT互联网职业培训:如何申请创建数据分析项目组合​zhuanlan.zhihu.com
a39bbe307b1f5cbd6d8fe3aa7df43a46.png
IT互联网职业培训:大数据分析R中泊松回归模型实例​zhuanlan.zhihu.com
68a6f4f8d839f95705bba86ec3f07c11.png
IT互联网职业培训:原画概念设计环境光遮蔽AO贴图使用技巧​zhuanlan.zhihu.com
f698af7b6db024796c857dae94da6fbb.png

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

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

相关文章

cnn 准确率无法提升_清华类脑芯片再登Nature: 全球首款基于忆阻器的CNN存算一体芯片...

传统计算架构中计算与存储在不同电路单元中完成,造成大量数据搬运功耗增加和额外延迟,被认为是冯诺依曼计算架构的核心瓶颈。人类的大脑却并非如此,而是直接在记忆体里计算。被认为具有「存算一体」潜力的忆阻器,因而成为类脑计算…

oracle 几个字段中某个字段大于0其他字段不再进行统计?_如何深入理解MySQL 8.0直方图?...

MySQL8.0 新功能直方图,继承于Oracle ,MairaDB的实现方式。 那下面从mysql角度认识下,直方图是什么。先看下官方直方图的实现方式。 从上图上可以看到原来是ANALYZE命令。先了解一下MySQL里 ANALYZE命令到底有什么用。ANALYZE在MySQL里提交一…

godaddy修改php版本,Godaddy美国主机Plesk面板修改PHP版本教程

由于不同的需求,我们站长朋友们建站所用的网站程序也不尽相同,有PHP、ASP和ASP.NET等。Godaddy美国主机作为全球最大域名主机商,当之无愧成为站长使用最多的主机。不少朋友应该都知道不同的网站程序对于PHP和ASP的版本要求又不一样&#xff0…

mysql数据结构_mysql的底层数据结构

一.数据结构1. 二叉树特点:左侧子节点比父节点小,右侧子节点比父节点大(对于同一个父节点下的两个子节点)缺点:对于一直递增得数据不能存在该数据结构中,会变成链表,不能降低树的高度图 1-1图1-22. 红黑树特…

winform判断线程有没有完成_并发编程系列1:线程池的架构实现、大小配置、及四种线程池使用...

△ 公众号回复关键词“架构” 即可领取《1500BAT架构及面试专题合集》本篇为线程池系列文章之一,不经常使用线程池的童鞋,还有对几种线程的使用不甚了解的童鞋,可以读一下此文,并关注后续线程池相关文章连载。 本篇内容大纲&#…

python枚举是什么意思,什么是枚举python

枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期、月份、状态等。Python 的原生类型(Built-in types)里并没有专门的枚举类型,但是我们可以通过很多方法来实现它,例如字典、类等&#x…

拖拽批量上传图片如何保证 顺序_图片压缩神器和图片分割工具,美工设计和运营终于得救了...

想要快速互联网干货技巧?请(置顶)星标我们好不容易写好文案,设计好长图海报,上传到微信公众号,竟然提示上传图片体积不得超过5M,怎么办?怎么办?不得已,只好又返回Ps里降低…

php将word转txt,PHP如何将将word文件转为pdf

PHP将word文件转为pdf的方法:首先修改【php.ini】,并重启环境;然后安装微软office套件;最后配置office组件服务即可。PHP将word文件转为pdf的方法:1、修改php.ini添加:extensionphp_com_dotnet.dll去除注释…

redis一般缓存什么样数据_SpringBoot+Redis轻松实现数据缓存

1.为什么需要缓存为什么需要缓存,我相信搞开发的都能回答出来,无非就是为了降低数据库压力,节约资源,提升系统性能。而事实上也确实是,归根结底就是降压,高并发,高性能。不过,大厂里…

红旗linux安装oracle,Redflag Linux安装Oracle 10gR2 RAC记事

Redflag Linux安装Oracle 10gR2 RAC记事Kamus遇到过:SQL> startup nomountORA-27102: out of memoryLinux-x86_64 Error: 28: No space LEFT ON device这和内核参数 shmall 有关,修改设置 kernel.shmall 16475728 。后来离开没多久,客户打…

springboot开启debug日志_SpringBoot 如何优雅的打印日志?

一、打印日志注意事项1、使用 Slf4j 注解这个代码相信大家都很熟悉,你是否曾经看到或者自己因 copy 而 没有改变“当前类名”?如果你们项目用到 lombok ,可以在类上使用 Slf4j 注解,省去手动写这行代码。2、不建议使用的输出为什么…

windows 映射文件会释放内存吗_Windows系统共享内存管理

一 进程逻辑空间 物理空间​如上图所示,每个进程都有自己的逻辑空间,这些逻辑空间,会被映射到具体的物理空间中。每个进程的逻辑空间都是彼此隔离,相互独立不受干扰的。但是他们都会被映射到同一个物理空间去,当其所映…

linux 文件的组织,Linux文件组织和目录结构

资料:https://www.shiyanlou.com/courses/running1 Linux目录结构说明可以使用tree来查看目录结构sudo apt-get install tree 安装treetree / 查看根目录的结构将目录定义为四种交互作使用的形态:2 路径. 表示当前目录.. 表示上一级目录 - 表示上一次所在…

jeecg 导出的excel不能使用公式_微软:Excel公式是世界上使用最广泛的编程语言...

喜欢就关注我们吧!文|一君微软近日推出了一项 Excel 公式构建的新功能 LAMBDA,正则测试阶段。LAMBDA 允许使用 Excel 自身的公式语言自定义功能,而过去,Excel 中需要通过 JS 等语言编写自定义函数。同时,LAMBDA 还可以…

voip 音频采集时间_蓝牙音频续航监测系统展会现场演示

|点击【美格信】关注☝大家好,我是美格信公众号主编:小M,今天的2020(秋季)亚洲蓝牙耳机展上,我们美格信现场展示了发布的新品-MAGNUM麦金纳蓝牙音频续航监测系统。不过有很多小伙伴因为时间问题,没机会来现场参观&…

linux 运行scrapy,python 文件 运行 scrapy

写了一个scrapy,程序可以跑,没有任何问题。爬下30个网站的body存入json文件,并且保存为test.json如果test.json存在就保存到一个新建的test1.json新建了一个python文件叫check.py,对比两个文件的hash值,如果有不一样&a…

大整数减法c语言_3.2 C语言运算符和表达式

01基本的算术运算符1、正号运算符2、-负号运算符3、*乘法运算符4、/除法运算符5、%求余运算符6、加法运算符7、-减法运算符读者应该特别注意和-在不同情况下的含义02自增、自减运算符1、i,--i在使用i之前,先是i的值加(减)12、i&am…

如何查看linux 是否安装软件包,linux 查看软件包是否安装 linux查看软件包

Linux下怎样检查,如何查看某软件包是否已经安装1、rpm包安装的,可以用rpm -qa看到,如果要查找某软件包是否安装,用 rpm -qa | grep “软件或者包的名字”。rpm -qa | grep ruby2、以deb包安装的,可以用dpkg -l能看到。如果是查找指…

trueOS能装linux软件,TrueOS 是什么

TrueOS是一套基于FreeBSD-CURRENT、桌面取向的类Unix操作系统。主要目的是创建一个易于安装软件的图形用户界面,借由提供KDE SC、Lumina、MATE、Xfce等桌面环境使其容易上手。TrueOS 是一套基于 FreeBSD-CURRENT、桌面取向的类 Unix操作系统。主要目的是创建一个易于…

错误: 非法的表达式开始_虽然这两个C语言宏定义很简单,但是能在程序运行前找到错误代码...

今天翻看 Linux 内核源代码时,发现两行非常有意思的C语言代码,如下:#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))#define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); }))有意思的宏这两行C语言代码有什么…