Python实现提取图片中颜色并绘制成可视化图表

目录
  • 导入模块并加载图片
  • 提取颜色并整合成表格
  • 绘制图表
  • 实战环节

今天小编来为大家分享一个有趣的可视化技巧,如何从图片中提取颜色然后绘制成可视化图表,如下图所示

在示例照片当中有着各种各样的颜色,我们将通过Python中的可视化模块以及opencv模块来识别出图片当中所有的颜色要素,并且将其添加到可视化图表的配色当中

导入模块并加载图片

那么按照惯例,第一步一般都是导入模块,可视化用到的模块是matplotlib模块,我们将图片中的颜色抽取出来之后会保存在颜色映射表中,所以要使用到colormap模块,同样也需要导入进来

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.image as mpimg

from PIL import Image
from matplotlib.offsetbox import OffsetImage, AnnotationBbox

import cv2
import extcolors
from colormap import rgb2hex

然后我们先来加载一下图片,代码如下

input_name = 'test_1.png'
img = plt.imread(input_name)
plt.imshow(img)
plt.axis('off')
plt.show()

output

提取颜色并整合成表格

我们调用的是extcolors模块来从图片中提取颜色,输出的结果是RGB形式呈现出来的颜色,代码如下

colors_x = extcolors.extract_from_path(img_url, tolerance=12, limit = 12)
colors_x

output

([((3, 107, 144), 180316),
  ((17, 129, 140), 139930),
  ((89, 126, 118), 134080),
  ((125, 148, 154), 20636),
  ((63, 112, 126), 18728),
  ((207, 220, 226), 11037),
  ((255, 255, 255), 7496),
  ((28, 80, 117), 4972),
  ((166, 191, 198), 4327),
  ((60, 150, 140), 4197),
  ((90, 94, 59), 3313),
  ((56, 66, 39), 1669)],
 538200)

我们将上述的结果整合成一个DataFrame数据集,代码如下

def color_to_df(input_color):
    colors_pre_list = str(input_color).replace('([(', '').split(', (')[0:-1]
    df_rgb = [i.split('), ')[0] + ')' for i in colors_pre_list]
    df_percent = [i.split('), ')[1].replace(')', '') for i in colors_pre_list]

    # 将RGB转换成十六进制的颜色
    df_color_up = [rgb2hex(int(i.split(", ")[0].replace("(", "")),
                           int(i.split(", ")[1]),
                           int(i.split(", ")[2].replace(")", ""))) for i in df_rgb]

    df = pd.DataFrame(zip(df_color_up, df_percent), columns=['c_code', 'occurence'])
    return df

我们尝试调用上面我们自定义的函数,输出的结果至DataFrame数据集当中

df_color = color_to_df(colors_x)
df_color

output

绘制图表

接下来便是绘制图表的阶段了,用到的是matplotlib模块,代码如下

fig, ax = plt.subplots(figsize=(90,90),dpi=10)
wedges, text = ax.pie(list_precent,
                      labels= text_c,
                      labeldistance= 1.05,
                      colors = list_color,
                      textprops={'fontsize': 120, 'color':'black'}
                     )
plt.setp(wedges, width=0.3)
ax.set_aspect("equal")
fig.set_facecolor('white')
plt.show()

output

从出来的饼图中显示了每种不同颜色的占比,我们更进一步将原图放置在圆环当中,

imagebox = OffsetImage(img, zoom=2.3)
ab = AnnotationBbox(imagebox, (0, 0))
ax1.add_artist(ab)

output

最后制作一张调色盘,将原图中的各种不同颜色都罗列开来,代码如下

## 调色盘
x_posi, y_posi, y_posi2 = 160, -170, -170
for c in list_color:
    if list_color.index(c) <= 5:
        y_posi += 180
        rect = patches.Rectangle((x_posi, y_posi), 360, 160, facecolor = c)
        ax2.add_patch(rect)
        ax2.text(x = x_posi+400, y = y_posi+100, s = c, fontdict={'fontsize': 190})
    else:
        y_posi2 += 180
        rect = patches.Rectangle((x_posi + 1000, y_posi2), 360, 160, facecolor = c)
        ax2.add_artist(rect)
        ax2.text(x = x_posi+1400, y = y_posi2+100, s = c, fontdict={'fontsize': 190})

ax2.axis('off')
fig.set_facecolor('white')
plt.imshow(bg)       
plt.tight_layout()

output

实战环节

这一块儿是实战环节,我们将上述所有的代码封装成一个完整的函数

def exact_color(input_image, resize, tolerance, zoom):
    
    output_width = resize
    img = Image.open(input_image)
    if img.size[0] >= resize:
        wpercent = (output_width/float(img.size[0]))
        hsize = int((float(img.size[1])*float(wpercent)))
        img = img.resize((output_width,hsize), Image.ANTIALIAS)
        resize_name = 'resize_'+ input_image
        img.save(resize_name)
    else:
        resize_name = input_image
    
    fig.set_facecolor('white')
    ax2.axis('off')
    bg = plt.imread('bg.png')
    plt.imshow(bg)       
    plt.tight_layout()
    return plt.show()
    
exact_color('test_2.png', 900, 12, 2.5)

output

以上就是Python实现提取图片中颜色并绘制成可视化图表的详细内容,更多关于Python提取图片颜色的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python3实现取图片中特定的像素替换指定的颜色示例

    本文实例讲述了Python3实现取图片中特定的像素替换指定的颜色.分享给大家供大家参考,具体如下: 1.原始图片 2.修改脚本: # -*- coding:utf-8 -*- #! python3 from PIL import Image i = 1 j = 1 img = Image.open("e:/pic/222.jpg")#读取系统的内照片 print (img.size)#打印图片大小 print (img.getpixel((4,4))) width = img.size

  • python读取图片颜色值并生成excel像素画的方法实例

    像素画: 需要用到的包: 进度条:progressbar pip install progressbar -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com excel:操作包openpyxl pip install openpyxl -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com 食用指南:

  • Python实现去除图片中指定颜色的像素功能示例

    本文实例讲述了Python实现去除图片中指定颜色的像素功能.分享给大家供大家参考,具体如下: 这里用python去除图片白色像素 需要python和pil from PIL import Image import numpy as np import cv2 img2 = Image.open('./Amazing_COL_2Fix.bmp') img1 = Image.open('./Amazing_RGB_2L.bmp') # img1 = img1.convert('RGBA') img2

  • python数据处理 根据颜色对图片进行分类的方法

    前面一篇文章有说过,利用scrapy来爬取图片,是为了对图片数据进行分类而收集数据. 本篇文章就是利用上次爬取的图片数据,根据图片的颜色特征来做一个简单的分类处理. 实现步骤如下: 1:图片路径添加 2:对比度处理 3:滤波处理 4:数据提取以及特征向量化 5:图片分类处理 6:根据处理结果将图片分类保存 代码量中等,还可以更少,只是我为了练习类的使用,而将每个步骤都封装成了一个独立的类,当然里面也有类继承的问题,遇到的问题前面一篇文章有讲解.内容可能有点繁琐,尤其是文件和路径的使用(可以自己修

  • python获取图片颜色信息的方法

    本文实例讲述了python获取图片颜色信息的方法.分享给大家供大家参考.具体分析如下: python的pil模块可以从图片获得图片每个像素点的颜色信息,下面的代码演示了如何获取图片所有点的颜色信息和每种颜色的数量. from PIL import Image image = Image.open("jb51.gif") image.getcolors() 返回结果如下 复制代码 代码如下: ..., (44, (72, 64, 55, 255)), (32, (231, 208, 14

  • Python Opencv提取图片中某种颜色组成的图形的方法

    主要目标识别图中红色的裂缝,尝试了几种不同的方法,最后发现比较每一点的RGB差值可以很好的解决这个问题,也就是提取图片中的红色相关信息.处理结果如下: 实现的代码如下,注意opencv读入的图片通道顺序是bgr: import cv2 import matplotlib.pyplot as plt imagepath = r'tear/11.jpg' image = cv2.imread(imagepath) height,width,channel = image.shape for i in

  • Python实现提取图片中颜色并绘制成可视化图表

    目录 导入模块并加载图片 提取颜色并整合成表格 绘制图表 实战环节 今天小编来为大家分享一个有趣的可视化技巧,如何从图片中提取颜色然后绘制成可视化图表,如下图所示 在示例照片当中有着各种各样的颜色,我们将通过Python中的可视化模块以及opencv模块来识别出图片当中所有的颜色要素,并且将其添加到可视化图表的配色当中 导入模块并加载图片 那么按照惯例,第一步一般都是导入模块,可视化用到的模块是matplotlib模块,我们将图片中的颜色抽取出来之后会保存在颜色映射表中,所以要使用到colorm

  • Python+pyecharts绘制交互式可视化图表

    目录 一.热力图 二.地理图表 2.1 地理坐标系 2.2 市区地图 2.3人口流动图 2.4 3D地图 2.5 3D地球 三.疫情数据可视化 四.空气质量数据可视化 五.外卖点分布数据可视化 六.总结 本篇我们来了解一个新的可视化模块pyecharts,由于爬虫敏感问题,博主对数据已经提取供大家使用,本篇文章仅介绍数据可视化. 一.热力图 案例:绘制2021部分城市的GDP热力图(比如上海,北京,深圳,重庆,长沙的2021年总GDP),data为一个列表,每个城市数据用元祖表示,比如:(‘上海

  • Python干货:分享Python绘制六种可视化图表

    可视化图表,有相当多种,但常见的也就下面几种,其他比较复杂一点,大都也是基于如下几种进行组合,变换出来的.对于初学者来说,很容易被这官网上众多的图表类型给吓着了,由于种类太多,几种图表的绘制方法很有可能会混淆起来. 因此,在这里,我特地总结了六种常见的基本图表类型,你可以通过对比学习,打下坚实的基础. 01. 折线图 绘制折线图,如果你数据不是很多的话,画出来的图将是曲折状态,但一旦你的数据集大起来,比如下面我们的示例,有100个点,所以我们用肉眼看到的将是一条平滑的曲线. 这里我绘制三条线,只

  • 如何利用 Python 绘制动态可视化图表

    目录 一.安装相关的模块 二.gif和matplotlib的结合 三.gif和plotly的结合 四.matplotlib多子图动态可视化 五.动态气泡图 一.安装相关的模块 首先第一步的话我们需要安装相关的模块,通过pip命令来安装 pip install gif 另外由于gif模块之后会被当做是装饰器放在绘制可视化图表的函数上,主要我们依赖的还是Python当中绘制可视化图表的matplotlib.plotly.以及altair这些模块,因此我们还需要下面这几个库 pip install "

  • 一文教会你用Python绘制动态可视化图表

    目录 前言 安装模块 可视化动态图 太阳图 指针图 桑基图 平行坐标图 总结 前言 对数据科学家来说,讲故事是一个至关重要的技能.为了表达我们的思想并且说服别人,我们需要有效的沟通.而漂漂亮亮的可视化是完成这一任务的绝佳工具. 本文将介绍5种非传统的可视化技术,可让你的数据故事更漂亮和更有效.这里将使用Python的Plotly图形库,让你可以毫不费力地生成动画图表和交互式图表. 安装模块 如果你还没安装 Plotly,只需在你的终端运行以下命令即可完成安装: pip install plotl

  • Python数据分析:手把手教你用Pandas生成可视化图表的教程

    大家都知道,Matplotlib 是众多 Python 可视化包的鼻祖,也是Python最常用的标准可视化库,其功能非常强大,同时也非常复杂,想要搞明白并非易事.但自从Python进入3.0时代以后,pandas的使用变得更加普及,它的身影经常见于市场分析.爬虫.金融分析以及科学计算中. 作为数据分析工具的集大成者,pandas作者曾说,pandas中的可视化功能比plt更加简便和功能强大.实际上,如果是对图表细节有极高要求,那么建议大家使用matplotlib通过底层图表模块进行编码.当然,我

  • 详解利用python-highcharts库绘制交互式可视化图表

    目录 python-highcharts库的简单介绍 python-highcharts具体案例 总结 今天小编给大家推荐一个超强交互式可视化绘制工具-python-highcharts,熟悉HightCharts绘图软件的小伙伴对这个不会陌生,python-highcharts就是使用Python进行Highcharts项目绘制,简单的说就是实现Python和Javascript之间的简单转换层,话不多说,我们直接进行介绍,具体包括以下几个方面: python-highcharts库的简单介绍

  • Python中Matplotlib的点、线形状、颜色以及绘制散点图

    目录 常用颜色: 常用标记点形状: 常用线形: 绘制散点图 补充:Python散点图教程 总结 我们在Python中经常使用会用到matplotlib画图,有些曲线和点的形状.颜色信息长时间不用就忘了,整理一下便于查找. 安装matplotlib后可以查看官方说明(太长不贴出来了) from matplotlib import pyplot as plt help(plt.plot) 常用颜色: 'b'          蓝色'g'          绿色'r'          红色'c'  

随机推荐