作者:韩信子@ShowMeAI Python3◉技能提高系列:www.showmeai.tech/tutorials/5… 计算机视觉实战系列:www.showmeai.tech/tutorials/4… 本文地址:www.showmeai.tech/article-det… 声明:版权所有,转载请联络平台与作者并注明出处 收藏ShowMeAI检查更多精彩内容
引言
咱们本次用到的数据集是 Kaggle 100 种鸟数据集,咱们能够经过 ShowMeAI 的百度网盘地址下载。
实战数据集下载(百度网盘):大众号『ShowMeAI研究中心』回复『实战』,或许点击 这儿 获取本文 [39]运用Python构建图片色彩提取器 『Bird 450 Species数据集』
⭐ ShowMeAI官方GitHub:github.com/ShowMeAI-Hu…
咱们在做图画处理或许制造PPT时,一个非常常用的功用是色彩提取,咱们能够经过提取器从已有图画的某个位置提取色彩,而不必自己肉眼比对和挑选。今天ShowMeAI就带咱们用python来完结这个功用。
咱们会构建如下2个色彩提取器:
- 简略提取器——从单个图画中挑选色彩
- 杂乱提取器——从多个图画中挑选色彩列表并显现色彩
本文的完结触及python编程常识与部分数据可视化常识,咱们能够经过ShowMeAI的以下教程和文章进行系统学习:
图解Python编程:从入门到精通系列教程
数据科学东西库速查表 | Matplotlib 速查表
色彩提取器完结
导入东西库
首先咱们需求导入本次所需的东西库,matplotlib.image
用于显现图画,pyperclip
用于将字符串保存到剪贴板,glob
用于处理文件途径。
#Imports
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import pyperclip
import random
import glob
咱们将从不同的鸟类图画中提取色彩(即咱们在第1节看到的图画)。咱们读取途径下所有的jpg格式图画,代码如下:
#Dataset
read_path = "../../data/birds/"
img_path = glob.glob(read_path + "*.jpg")
简略色彩提取器完结
咱们先完结一个简略色彩提取器。它的功用是,每次咱们单击图画中的某个位置,该像素的 RGB 通道会保存到咱们的剪贴板中,然后咱们能够将该值粘贴到笔记本中。
咱们先构建一个onclick
函数,每次单击图画时都会运转此程序。咱们获取点击的 x 和 y 坐标,然后得到该坐标处像素的 RGB 通道值,并将其作为字符串保存到剪贴板。完好的代码如下:
def onclick(event):
global img
# get x,y of click
x = round(event.xdata)
y = round(event.ydata)
# get RGB values
rgb = img[y][x]
# save to clip board
pyperclip.copy(str(rgb))
咱们要运用上面这个函数,咱们首先运用 matplotlib 创建一个图形,然后设置该图的交互功用,将onclick
函数作为参数传入,这样咱们每次点击就会调用上述函数进行色彩提取。
%matplotlib notebook
global img
fig = plt.figure(figsize=(5,5))
#Add an interactive widget to figure
cid = fig.canvas.mpl_connect('button_press_event', onclick)
#Load image and add count
path = img_path[0]
img = mpimg.imread(path)
plt.imshow(img)
plt.show()
留意:上述代码的第2行运用了大局变量,这样就能够在
onclick
函数中更新这些变量。
杂乱色彩提取器完结
下面咱们来构建一个杂乱色彩提取器,它完结的功用如下图所示:咱们多次点击不同图画的多个位置,咱们会依照次序编号和记载色彩(留意色彩框左上角的红色数字),并把色彩保存到列表中。
咱们还是需求构建onclick
函数,和之前的简略色彩提取器有点相似,这儿的主要区别在于咱们不直接保存 RGB 通道值,而是调用change_choice
来调整右侧显现的提取色彩。
def onclick(event):
global img
global rgb
# get x,y of click
x = round(event.xdata)
y = round(event.ydata)
# get RGB values
rgb = img[y][x]
#Update second plot with colour
change_choice()
咱们再界说一个函数onpress
,它会在按下键盘时运转。这个函数在按下了不同键的情况下做不同的处理:(change_image
和change_choice
会分别用于更新图片和更新显现色彩框,在后续会界说)
-
n
:运转change_image
函数。 -
c
:咱们将 RGB 通道值保存到剪贴板和色彩列表中,接着运转change_choice
函数。
详细代码完结如下:
def onpress(event):
global rgb
global colours
#Get key
key = event.key
if key == 'n':
change_image()
elif key == 'c':
# save to clip board
pyperclip.copy(str(rgb))
# add to list of colours
colours.append(rgb)
change_choice()
change_choice
函数用于更新右侧色彩框。右侧的色彩框有与图画框相同的尺度,并且根据当时大局 rgb 值进行色彩显现。
def change_choice():
global img
global ax
global colours
global rgb
# remove previous count
for txt in ax[1].texts:
txt.set_visible(False)
# create array of colour choice
dims = np.shape(img)
col = np.array([[rgb]*dims[0]]*dims[1])
ax[1].imshow(col)
# update colour count
ax[1].text(0, 15, len(colours),color='r',size=20)
plt.show()
change_choice
函数在2处调用和履行:
- 点击图片时调用的onclick函数中,它完结 大局 rgb 更新并调整框中的色彩。
- 调用
onpress
函数并按下“c”时,这儿色彩列表的长度+1,色彩计数也会改变。
接下来咱们界说change_image
函数。咱们在按下“n”时会调用它更新图画框。代码如下:
def change_image():
global img_path
global img
global ax
global rgb
# close all open plots
plt.close('all')
fig,ax = plt.subplots(1,2,figsize=(10,5))
# add an interactive widget to figure
cid = fig.canvas.mpl_connect('button_press_event', onclick)
cid2 = fig.canvas.mpl_connect('key_press_event', onpress)
# load random image
path = random.choice(img_path)
img = mpimg.imread(path)
ax[0].imshow(img)
# reset the colour window
rgb = [255,255,255]
change_choice()
咱们能够经过运转change_image
函数来启动色彩挑选器,如下:
%matplotlib tk
global img_path
global colours
colours = []
# load image paths
read_path = "../../data/birds/"
img_path = glob.glob(read_path + "*.jpg")
# start widget
change_image()
接下来当你就能够运用这个杂乱色彩提取器啦,在您遍历图画并保存色彩时,色彩列表随之更更新,咱们在下图的 colours 里能够看到提取的色彩构建的rgb值序列。
参考资料
- Kaggle 100 种鸟数据集:www.kaggle.com/datasets/gp…
- Python3◉技能提高系列:www.showmeai.tech/tutorials/5…
- 数据科学东西库速查表 | Matplotlib 速查表:www.showmeai.tech/article-det…
引荐阅读
- 数据剖析实战系列 :www.showmeai.tech/tutorials/4…
- 机器学习数据剖析实战系列:www.showmeai.tech/tutorials/4…
- 深度学习数据剖析实战系列:www.showmeai.tech/tutorials/4…
- TensorFlow数据剖析实战系列:www.showmeai.tech/tutorials/4…
- PyTorch数据剖析实战系列:www.showmeai.tech/tutorials/4…
- NLP实战数据剖析实战系列:www.showmeai.tech/tutorials/4…
- CV实战数据剖析实战系列:www.showmeai.tech/tutorials/4…
- AI 面试题库系列:www.showmeai.tech/tutorials/4…
本文正在参与「金石计划 . 瓜分6万现金大奖」