1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

Python完成提取图片中色调并制作成可视化图表

Python语言表达的数据可视化方法——从照片中提取颜色

接下来小编来给大家分享一种有意思的数据可视化方法,便是如何运用Python语言表达即从照片中提取颜色随后制作成可视化图表,有兴趣的话可以试一试。

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

接着,加载图片。下面是关于如何通过Python语言加载图片的代码:

代码:

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

下一步,是提取颜色并将其整合到一个数据集中。我们将使用extcolors模块从图片中提取颜色,输出的结果是RGB形式呈现出来的颜色。下面是关于如何整理数据并输出结果的代码:

代码:

colors_x = extcolors.extract_from_path(img_url, tolerance=12, limit=12)
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]
    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

df_color = color_to_df(colors_x)

接下来,就可以开始绘制图表了。下面是关于如何运用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()

图表完成后,我们还可以制作调色盘,将原图中的各种不同颜色都罗列开来。下面是制作调色盘的相关代码:

代码:

##调色盘
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()

最后,将上述所有的代码封装成一个完整的函数,便可以使用此函数完成图片颜色提取及表格整合。下面是包含完整的函数代码和运行结果的相关截图:

代码:

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)

运行结果:

运行结果

综上所述,以上就是我们从Python语言的角度将图片中的颜色提取出来并绘制成可视化图表的完整过程。希望对大家有所帮助。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6941.html