根据颜色对图像进行排序

时间:2017-10-10 12:24:06

标签: opencv image-processing

我有一些石头的图像。石头颜色很奶油,我想根据它们的颜色差异对图像进行分类。我想给出最轻的0级石头和10级最黑的石头,并将这两种石头分类。石头非常相似,但它们的色差可以通过眼睛检测到 我知道如果所有蓝色的石头,例如我可以根据RGB颜色的R部分对它们进行分类。但是奶油色呢?

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:3)

您不需要考虑安装编译器和 OpenCV 的复杂性以及编写/编译Python / C ++代码以获得图像的平均亮度。您可以使用大多数Linux发行版上安装的 ImageMagick ,也可用于macOS和Windows。

基本上,您可以在 HSL 色彩空间或 Lab 色彩空间中查看" Lightness"

让我们首先看一下 HSL

# Resize stone down to one average pixel, convert to HSL colourspace and print
convert stone1.jpg -resize 1x1 -colorspace HSL txt:

# ImageMagick pixel enumeration: 1,1,65535,hsl
0,0: (4228.92,19250.9,52587.2)  #104BCD  hsl(23.2305,29.375%,80.2429%)

因此HSL中stone1.jpg的亮度为80.24%。让我们试试stone2.jpg

convert stone2.jpg -resize 1x1 -colorspace HSL txt:

# ImageMagick pixel enumeration: 1,1,65535,hsl
0,0: (7387.85,27252.5,57243)  #1D6ADF  hsl(40.5833,41.5846%,87.3472%)

因此,stone2.jpg较轻,为87.35%

让我们简化输出以仅显示亮度:

convert stone1.jpg -colorspace HSL -format "%[fx:int(100*mean.b)]" info:
80

stone2.jpg

convert stone2.jpg -colorspace HSL -format "%[fx:int(100*mean.b)]" info:
87

现在让我们看一下 Lab colourspace。

convert stone1.jpg -resize 1x1 -colorspace Lab txt:

# ImageMagick pixel enumeration: 1,1,65535,cielab
0,0: (53895.2,1140.43,2057.36)  #D20408  cielab(82.2388%,1.74018%,3.13933%)

因此,stone1.jpg实验室亮度为82.24%,让我们看一下stone2.jpg

convert stone2.jpg -resize 1x1 -colorspace Lab txt:

# ImageMagick pixel enumeration: 1,1,65535,cielab
0,0: (59395,-21.0391,2545.27)  #E7000A  cielab(90.6309%,-0.0321036%,3.88383%)

因此,stone2.jpg的亮度为90.6%。

如果我们想要更简单的表格怎么办?

convert stone1.jpg -colorspace Lab -format "%[fx:int(100*mean.r)]" info:
82

百分比是多少?它们是白色的百分比,所以纯白色为100%,纯黑色为0%。快速测试...

convert xc:black -colorspace Lab txt:
# ImageMagick pixel enumeration: 1,1,65535,cielab
0,0: (0,-0.5,-0.5)  #000000000000  cielab(0%,-0.000762951%,-0.000762951%)

convert xc:white -colorspace Lab txt:
# ImageMagick pixel enumeration: 1,1,65535,cielab
0,0: (65535,0.125,-1.69336)  #FFFF00000000  cielab(100%,0.000190738%,-0.0025839%)

如果你有一个完整的石头样本目录并且你想要每个 HSL 亮度值怎么办?

convert stone* -colorspace HSL -format "%f:%[fx:int(100*mean.b)]\n" info:
stone1.jpg:80
stone2.jpg:87
stone3.jpg:75
stone4.jpg:92

答案 1 :(得分:2)

  

我想根据它们的颜色差异对图像进行分类。我想给出最轻的0级石头和10级最黑的石头,并在这两者之间进行分类。石头非常相似,但它们的色差可以通过眼睛检测到。

如果您想从浅到深对它们进行排序,并考虑到色调,则RGB色彩空间不太适合。您应该查看Lab colour spaceHue Saturation Lightness (HSL)色彩空间。

通过将图像转换为其中一个颜色空间,然后取平均值,您可以将其分为亮度和一个或两个颜色/色调轴。 (这假设图像内容大多是同质的。)