我正在为一个大学项目做一个RGB图像的“卡通”滤镜,所以我想做一些事情来优化图像。我能使用的库只有numpy,matplotlib.pyplot和skimage。
现在我这样做了:
n = 64
quant[:,:,0] = np.floor_divide(R2, 256//(n//4))*(256//(n//4))
quant[:,:,1] = np.floor_divide(G2, 256//(n//4))*(256//(n//4))
quant[:,:,2] = np.floor_divide(B2, 256//(n//4))*(256//(n//4))
plt.imshow(quant)
字符串
通过这种方式,我实现了我的目标,但并不完全,因为我希望n是图像可以具有的颜色的确切数量,不多也不少。
有什么建议吗?
1条答案
按热度按时间f0brbegy1#
你要做的是:
为了加分,您可能希望在感知颜色空间(如CIELAB)中执行此操作,而不是直接在RGB中执行此操作。
让sklearn来做k-means聚类会很方便,但是,如果做不到这一点,在纯NumPy中实现并不太难(可能是一个很好的练习)。
最后,你可能可以用
skimage.segmentation.slic
来复制这一切。SLIC做了更花哨的事情,在空间和颜色空间中进行聚类,但是你可以使用compactness
,convert2lab
和enforce_connectivity
参数来强制它只在颜色空间中进行聚类。