Rumah > Artikel > pembangunan bahagian belakang > Kongsi teknik visualisasi Python yang menarik
Seperti yang ditunjukkan di bawah:
Terdapat pelbagai warna dalam contoh foto, kami akan menggunakan Python to The visualization module dan modul opencv mengenal pasti semua elemen warna dalam gambar dan menambahnya pada padanan warna carta visual.
Seperti biasa, langkah pertama ialah mengimport modul Modul yang digunakan untuk visualisasi ialah modul matplotlib Dalam jadual peta warna, jadi untuk menggunakan modul peta warna, ia juga perlu diimport.
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
Kemudian mari kita memuatkan imej dahulu Kodnya adalah seperti berikut:
input_name = 'test_1.png' img = plt.imread(input_name) plt.imshow(img) plt.axis('off') plt.show() output
Kami memanggil modul extcolors untuk mengekstrak warna daripada imej Hasil output ialah warna yang dibentangkan dalam bentuk RGB Kod adalah seperti berikut:
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).
Kami akan Hasilnya disepadukan ke dalam set data DataFrame Kodnya adalah seperti berikut:
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
Kami cuba memanggil fungsi tersuai kami di atas dan mengeluarkan hasilnya kepada set data DataFrame.
df_color = color_to_df(colors_x) df_color
output
Langkah seterusnya ialah melukis carta, menggunakan modul matplotlib seperti berikut:
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
Carta pai yang terhasil menunjukkan perkadaran setiap warna yang berbeza Kami mengubah lagi imej asal yang diletakkan di dalam gelang .
imagebox = OffsetImage(img, zoom=2.3) ab = AnnotationBbox(imagebox, (0, 0)) ax1.add_artist(ab)
output
Akhir sekali, buat palet warna untuk menyenaraikan semua warna yang berbeza dalam imej asal Kodnya adalah seperti berikut:
## 调色盘 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
Ini adalah pautan sebenar Kami merangkumkan semua kod di atas ke dalam fungsi yang lengkap.
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
Atas ialah kandungan terperinci Kongsi teknik visualisasi Python yang menarik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!