使用色图从图像中提取所有颜色

问题描述 投票:0回答:4

我愿意使用色彩图获取 python 中图像中存在的所有颜色。在文档中他们没有具体说明这一点。这是我的代码:

import colorgram as cg

color_list = cg.extract("dot-img.jpg", 60)
color_palette = []

for count in range(len(color_list)):
    rgb = color_list[count]
    color = rgb.rgb
    color_palette.append(color)

我在 cg.extract 第二个参数中写了 60。但我没有 60 种颜色。这是否意味着 colorgram 返回了图像中存在的所有颜色?

python
4个回答
3
投票

只需为

number_of_colors
变量指定一个尽可能大的数字即可。系统会正确处理。

import colorgram as cg

color_list = cg.extract("dot-img.jpg", 2 ** 32)
color_palette = []

for count in range(len(color_list)):
    rgb = color_list[count]
    color = rgb.rgb
    color_palette.append(color)

源代码在

colorgram
:

def get_colors(samples, used, number_of_colors):
    pixels = 0
    colors = []
    number_of_colors = min(number_of_colors, len(used))

    for count, index in used[:number_of_colors]:
        pixels += count

        color = Color(
            samples[index]     // count,
            samples[index + 1] // count,
            samples[index + 2] // count,
            count
        )

        colors.append(color)
    for color in colors:
        color.proportion /= pixels
    return colors

1
投票

您可以在给定用户回答后执行此操作,但它不会工作,因为您的格式是“RGB”。如果你想使用那种颜色,你应该转换它。例如:

import colorgram as cg

import turtle as t

colors = cg.extract('pink_image.jpg', 25)

rgb_colors = []

t.speed(100)

screen = t.Screen()


for coloring in colors:

    r = coloring.rgb.r
    g = coloring.rgb.g
    b = coloring.rgb.b
    new_color = (r, g, b)
    rgb_colors.append(new_color)

print(rgb_colors) 

查看输出位于您的输出之后的上方。当您查看自己的代码时,您可以看到这种输出:

>> [Rgb(r=245, g=243, b=238),Rgb(r=247, g=242, b=244)]
你不能这样使用它。你应该像我的代码一样转换它。希望你能理解。


0
投票

要获取可用的 RGB 代码列表,您需要使用以下代码:

import colorgram as cg

color_list = cg.extract("image.jpg", 10)

color_palette = []

for i in range(len(color_list)):
    r = color_list[i].rgb.r
    g = color_list[i].rgb.g
    b = color_list[i].rgb.b
    new_color = (r, g, b)
    color_palette.append(new_color)

print(color_palette)

0
投票

Colorgram 从白色背景的图像中挑选白色和灰色。为了避免这种情况,我使用了简单的 color_check :D

import colorgram as cg
color_list = cg.extract("image.jpg", 30)

color_palette = []
# from stackoverflow
for i in range(len(color_list)):
    r = color_list[i].rgb.r
    g = color_list[i].rgb.g
    b = color_list[i].rgb.b
    new_color = (r, g, b)

    # Remove colours close to RGB 255 to exclude background grays
    colorcheck = r+g+b
    # set sensitivity 600-700
    if colorcheck < 700:
        color_palette.append(new_color)

print(color_palette)
© www.soinside.com 2019 - 2024. All rights reserved.