python生成可视化图表,python图片上色
今天边肖给大家分享一个有趣的可视化技术,就是如何用Python语言从图片中提取颜色,绘制成可视化图表。有兴趣的可以试试。
00-1010导入模块加载图片提取颜色整合成表格绘制图表。今天,边肖将为你分享一个有趣的视觉化技巧。如何从图片中提取颜色并绘制成可视化图表,如下图所示。
样本照片中有各种颜色。我们会通过Python中的可视化模块和opencv模块来识别照片中的所有颜色元素,并添加到可视化图表的颜色匹配中。
目录
然后按照惯例,第一步是导入模块,用于可视化的模块是matplotlib模块。我们从图片中提取颜色后,会保存在颜色映射表中,所以要使用colormap模块,我们还需要导入它。
importnumpyasnp
importpandasaspd
importmatplotlib.pyplotasplt
importmatplotlib . patchesapatches
importmatplotlib.imageasmpimg
fromPILimportImage
frommatplotlib . offsetboximportoffsetimage,AnnotationBbox
importcv2
import text colors
fromcolormapimportrgb2hex
那我们先加载图片吧。代码如下所示
输入名称=测试1.png
img=plt.imread(input_name)
plt.imshow(img)
plt.axis(“关”)
plt.show()
输出
导入模块并加载图片
我们调用extcolors模块从图片中提取颜色,输出结果是以RGB形式呈现的颜色。代码如下所示
colors _ x=ext colors . ext _ from _ path(img _ URL,tolerance=12,limit=12)
颜色_x
输出
([((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数据集,代码如下
defcolor_to_df(输入颜色):
colors_pre_list=str(input_c
olor).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提取图片颜色的资料请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。