Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Kongsi teknik visualisasi Python yang menarik

Kongsi teknik visualisasi Python yang menarik

WBOY
WBOYke hadapan
2023-04-12 08:22:141700semak imbas

Kongsi teknik visualisasi Python yang menarik

Seperti yang ditunjukkan di bawah:

Kongsi teknik visualisasi Python yang menarik

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.

Import modul dan muatkan imej

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

Kongsi teknik visualisasi Python yang menarik

Ekstrak warna dan sepadukannya ke dalam jadual

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

Kongsi teknik visualisasi Python yang menarik

Melukis carta

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

Kongsi teknik visualisasi Python yang menarik

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

Kongsi teknik visualisasi Python yang menarik

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

Kongsi teknik visualisasi Python yang menarik

Pautan praktikal

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

Kongsi teknik visualisasi Python yang menarik


Atas ialah kandungan terperinci Kongsi teknik visualisasi Python yang menarik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam