gpt4 book ai didi

python - 计算不同颜色的像素 - Python

转载 作者:行者123 更新时间:2023-12-04 13:02:58 24 4
gpt4 key购买 nike

我在这里找到了这段代码,但它所做的只是计算黑色和红色,这仅适用于黑色和红色图像。

from PIL import Image
im = Image.open('oh.png')

black = 0
red = 0

for pixel in im.getdata():
if pixel == (0, 0, 0, 255): # if your image is RGB (if RGBA, (0, 0, 0, 255) or so
black += 1
else:
red += 1
print('black=' + str(black)+', red='+str(red))

我如何能够检查不同的颜色而不是那么精确,例如黑色可以是 (0, 0, 0) 到 (40,40,40)。

这可能问的太多了,让我知道。
谢谢 :)

最佳答案

这是一种使用 KDTree 进行高效最近颜色查找的方法。请注意,虽然 KDTrees 可能非常先进,但使用它们实际上非常简单。

import numpy as np
from matplotlib import colors
from scipy.spatial import cKDTree as KDTree
from scipy.misc import face

REDUCED_COLOR_SPACE = True

# borrow a list of named colors from matplotlib
if REDUCED_COLOR_SPACE:
use_colors = {k: colors.cnames[k] for k in ['red', 'green', 'blue', 'black', 'yellow', 'purple']}
else:
use_colors = colors.cnames

# translate hexstring to RGB tuple
named_colors = {k: tuple(map(int, (v[1:3], v[3:5], v[5:7]), 3*(16,)))
for k, v in use_colors.items()}
ncol = len(named_colors)

if REDUCED_COLOR_SPACE:
ncol -= 1
no_match = named_colors.pop('purple')
else:
no_match = named_colors['purple']

# make an array containing the RGB values
color_tuples = list(named_colors.values())
color_tuples.append(no_match)
color_tuples = np.array(color_tuples)

color_names = list(named_colors)
color_names.append('no match')

# get example picture
img = face()

# build tree
tree = KDTree(color_tuples[:-1])
# tolerance for color match `inf` means use best match no matter how
# bad it may be
tolerance = np.inf
# find closest color in tree for each pixel in picture
dist, idx = tree.query(img, distance_upper_bound=tolerance)
# count and reattach names
counts = dict(zip(color_names, np.bincount(idx.ravel(), None, ncol+1)))

print(counts)

import pylab

pylab.imshow(img)
pylab.savefig('orig.png')
pylab.clf()
pylab.imshow(color_tuples[idx])
pylab.savefig('minimal.png' if REDUCED_COLOR_SPACE else 'reduced.png')

具有完整 matplotlib 命名颜色空间的输出:

{'aliceblue':315,'antiquewhite':0,'aqua':0,'aquamarine':0,'azure':0,'beige':27,'bisque':0,'black':88584,'白桃木':0,'蓝色':0,'蓝紫':0,'棕色':0,'burlywood':76,'cadetblue':0,'chartreuse':0,'巧克力':0,'珊瑚' : 0, 'cornflowerblue': 0, 'cornsilk': 0, 'crimson': 0, 'cyan': 0, 'darkblue': 0, 'darkcyan': 0, 'darkgoldenrod': 0, 'darkgray': 0 ,'darkgreen':4148,'darkgrey':71985,'darkkhaki':32907,'darkmagenta':0,'darkolivegreen':90899,'darkorange':0,'darkorchid':0,'0,'darkred darksalmon':0,'darkseagreen':30171,'darkslateblue':134,'darkslategray':108608,'darkslategrey':0,'darkturquoise':0,'darkviolet':0,'deeppink0'epink': : 0, 'dimgray': 0, 'dimgrey': 108318, 'dodgerblue': 0, 'firebrick': 0, 'floralwhite': 0, 'forestgreen': 1, 'fuchsia': 0, 'gainsboro': 10438 , 'ghostwhite': 736, 'gold': 0, 'goldenrod': 0, 'gray': 0, 'green': 0, 'greenyellow': 0, 'grey': 79835, 'honeydew': 0, ' hotpink': 0, 'indianred': 0, 'indig o': 0, '象牙色': 0, '卡其色': 1056, '薰衣草色': 4650, 'lavenderblush': 46, 'lawngreen': 0, 'lemonchiffon': 0, 'lightblue': 3, 'lightcoral' : 0, 'lightcyan': 0, 'lightgoldenrodyellow': 0, 'lightgray': 11905, 'lightgreen': 2323, 'lightgrey': 0, 'lightpink': 0, 'lightsalmon': 0, 'lightseagreen': 0 , 'lightskyblue': 0, 'lightslategray': 0, 'lightslategrey': 31920, 'lightsteelblue': 3590, 'lightyellow': 0, 'lime': 0, 'limegreen': 0, 'linen': 46, '洋红色:0,“栗色”:0,“中海蓝 gem ”:0,“中蓝”:0,“中兰花”:0,“中紫”:15,“中海绿”:0,“中蓝”:0,“中蓝”: :0,'mediumturquoise':0,'mediumvioletred':0,'midnightblue':54,'mintcream':0,'mistyrose':19,'moccasin':0,'navajowhite':0,'navy':0 , 'oldlace': 0, 'olive': 0, 'olivedrab': 30828, 'orange': 0, 'orangered': 0, 'orchid': 0, 'palegoldenrod': 1499, 'palegreen': 285, '淡紫色':0,'淡紫色':0,'木瓜':0,'桃子泡芙':0,'秘鲁':21,'粉红色':0,'梅花':0,'粉状' ue': 0, 'purple': 0, 'rebeccapurple': 0, 'red': 0, 'rosybrown': 2831, 'royalblue': 0, 'saddlebrown': 0, 'salmon': 0, 'sandybrown' : 0, 'seagreen': 0, 'seashell': 0, 'sienna': 5, 'silver': 35951, 'skyblue': 0, 'slateblue': 0, 'slategray': 7836, 'slategrey': 0 , 'snow': 18, 'springgreen': 0, 'steelblue': 0, 'tan': 3925, 'teal': 0, 'thiSTLe': 10274, 'tomato': 0, 'turquoise': 0, '紫”:0,“小麦”:21,“白”:3,“白烟”:834,“黄”:0,“黄绿”:9292,“不匹配”:0}

仅使用基本颜色的输出:

{'红色':0,'绿色':403561,'蓝色':3262,'黑色':153782,'黄色':225827,'不匹配':0}

原图:

enter image description here

减色版:

enter image description here

基本颜色版本:

enter image description here

关于python - 计算不同颜色的像素 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50545192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com