程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何使用直方图找到主色 RGB?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何使用直方图找到主色 RGB??

开发过程中遇到如何使用直方图找到主色 RGB?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何使用直方图找到主色 RGB?的解决方法建议,希望对你解决如何使用直方图找到主色 RGB?有所启发或帮助;

我目前正在开发一系列测试代码来探索处理图像数据的不同方式,我的主要课题之一是颜色提取。

我开发了以下 Python 代码,该代码在给定图像的情况下能够提取其对应的具有 R、G 和 B 值的直方图:

# Reading original image,in full color
img = mpimg.imread('/content/brandlogos/Images/14 (48).jpg')

# displaying the image
imgplot = plt.imshow(img)
plt.show()

# CreaTing a tuple to @R_674_10288@ct colors of each chAnnel line
colors = ("r","g","b")
chAnnel_IDs = (0,1,2)

# Making an histogram with three lines,one for each color
# The X lim@R_675_8913@ 255,for RGB values
plt.xlim([0,256])
for chAnnel_ID,c in zip(chAnnel_IDs,colors):
  histogram,bin_edges = np.histogram(
      img[:,:,chAnnel_ID],bins = 256,range=(0,256)
  )
  plt.plot(bin_edges[0:-1],histogram,color=c )

# displaying the histogram
plt.xlabel("color Value")
plt.ylabel("Pixels")

plt.show()

例:

如何使用直方图找到主色 RGB?

但是,我现在想根据直方图信息找到最主要颜色的 RGB 值。

预期输出:(87,74,163)(或类似的东西)

我将如何找到三个颜色通道的最高 bin 计数,并将它们组合成一种颜色?

解决方法

您可以关注图像中的 unique 种颜色,并找到计数最高的颜色:

import matplotlib.image as mpimg
import numpy as np

img = np.uint8(mpimg.imread('path/to/your/image.png') * 255)
img = np.reshape(img,(np.prod(img.shape[:2]),3))
res = np.unique(img,axis=0,return_counts=TruE)
dom_color = res[0][np.argmax(res[1]),:]
print(dom_color)

或者,您可以使用 Pillow 的 getcolors,并获得计数最高的那个:

from PIL import Image

img = Image.open('path/to/your/image.png')
dom_color = sorted(img.getcolors(2 ** 24),reverse=TruE)[0][1]
print(dom_color)

如果需要,两者都可以轻松提供第二、第三、...主色。

对于这样的标志

如何使用直方图找到主色 RGB?

主色表示为:

[208  16  18]

分别

(208,16,18)
----------------------------------------
System information
----------------------------------------
Platform:      Windows-10-10.0.16299-SP0
Python:        3.9.1
PyCharm:       2021.1.1
Matplotlib:    3.4.1
NumPy:         1.20.2
Pillow:        8.2.0
----------------------------------------

编辑:也许,为了让直方图方法成为对手,正如 Cris 在评论中所解释的那样,请参阅此图片:

如何使用直方图找到主色 RGB?

很难看,但是有三种不同类型的红色,最大的矩形的 RGB 值为 (208,18)

现在,让我们将您的直方图方法与 Pillow 的 getcolors 进行比较:

import numpy as np
from PIL import Image

adv = np.zeros((512,512,3),np.uint8)
adv[:200,:200,:] = [208,18]
adv[:200,200:,0]
adv[200:,:] = [0,18]
adv[200:,18]

# Histogram approach
dom_color = []
for chAnnel_id in [0,1,2]:
    dom_color.append(np.argmax(np.histogram(adv[...,chAnnel_id],bins=256,range=(0,256))[0]))
print(dom_color)
# [208,18]

# Pillow's getcolors
dom_color = sorted(Image.fromarray(adv).getcolors(2 ** 24),reverse=TruE)[0][1]
print(dom_color)
# (208,18)

对手在 (208,18) 处建立直方图峰值。然而,主色是 (208,18),因为我们可以很容易地从图像(或代码)中推导出来。

大佬总结

以上是大佬教程为你收集整理的如何使用直方图找到主色 RGB?全部内容,希望文章能够帮你解决如何使用直方图找到主色 RGB?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。