Python将图像转换为使用较少的颜色

2024-10-01 07:23:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把它作为一个像素数组来读。这意味着2d数组的每个元素要么是十六进制代码,要么是代表像素颜色的rgb3元组。在

我研究过图像处理,发现了像枕头或SciPy这样的东西,但我只发现了一些过于简单的事情,比如添加一个过滤器或更改图像的一般颜色属性(通过将每个像素的读取值和蓝色值乘以0.3-0.5,同时将绿色值乘以1,使其更环保,有效地保持不变)。我需要做的是能够根据每个像素的颜色分别检查它。在

在那之后,我需要转换成一个使用较少颜色的图像(如4或8)。我认为最好的方法是为这些期望的颜色定义一些“阈值”,当一个像素的颜色在定义的颜色范围内时,像素就会得到相应的颜色。在

我也没有发现太多关于这方面的信息,无论是在实际信息方面还是在人们试图做同样的事情。在

我想询问有关这类问题的任何信息或资源: -要使用的库(库)? -方法?(这类问题有没有广泛使用的算法?) -我是否使用了错误的编程语言?(有没有提供这种功能但更容易使用的呢?)在

如有任何帮助或信息,我们将不胜感激,提前谢谢!在

编辑:我发现了this问题,它涉及到获取像素的值,但我仍然需要将它们拆分为更少的颜色。在


Tags: 方法代码图像信息元素定义颜色代表
2条回答

你所追求的是颜色量化。设计了几种算法,如中值切割算法或流行算法。它们允许您使用所需的条目数构建“最佳”颜色表。在

这些方法在昂贵的显卡时代很流行,但是自从真彩色的普及之后就失去了名声。在

作为对颜色量化的补充,人们经常使用颜色抖动,这是一种恢复颜色渐变的平滑度并避免带状效应的方法。在

https://nl.mathworks.com/help/images/reduce-the-number-of-colors-in-an-image.html?requestedDomain=true

Library (libraries) to use?

scikit-image或{a2}将是我的首选。在

Methods? (Are there any widely used algorithms for this kind of problem?)

K-means clustering是一种流行的颜色量化方法。在

Am I using the wrong programming language? (Is there one that offers this kind of functionality but easier to use?)

Python可以说是这个任务的“最简单”语言。在

演示

考虑一下这个图像:

original

仅将以下代码从6+500K减少为:

import numpy as np
from skimage import io
from sklearn.cluster import KMeans

original = io.imread('https://i.stack.imgur.com/QCl8D.jpg')
n_colors = 6

arr = original.reshape((-1, 3))
kmeans = KMeans(n_clusters=n_colors, random_state=42).fit(arr)
labels = kmeans.labels_
centers = kmeans.cluster_centers_
less_colors = centers[labels].reshape(original.shape).astype('uint8')

io.imshow(less_colors)

这就是彩色量化图像的外观:

less_colors

相关问题 更多 >