Image 如何确定图像是否暗?(高对比度,低亮度)

Image 如何确定图像是否暗?(高对比度,低亮度),image,graphics,image-processing,imagemagick,Image,Graphics,Image Processing,Imagemagick,作为我正在进行的一个项目的一部分,我需要使用CLI Linux应用程序简单地分析一幅图片,并确定其是否为暗图像(高对比度、低亮度) 到目前为止,我发现我可以使用ImageMagick获取图像的详细信息,但不确定如何使用该数据……或者有更简单的解决方案吗?您可以将图像缩放到一个非常小的尺寸,即1x1像素,代表原始图像的“平均颜色”: convert original.jpeg -resize 1x1 1pixel-original.jpeg 然后首先研究单个像素的颜色 convert

作为我正在进行的一个项目的一部分,我需要使用CLI Linux应用程序简单地分析一幅图片,并确定其是否为暗图像(高对比度、低亮度)


到目前为止,我发现我可以使用ImageMagick获取图像的详细信息,但不确定如何使用该数据……或者有更简单的解决方案吗?

您可以将图像缩放到一个非常小的尺寸,即1x1像素,代表原始图像的“平均颜色”:

 convert  original.jpeg  -resize 1x1  1pixel-original.jpeg
然后首先研究单个像素的颜色

convert  1pixel-original.jpeg  1pixel-jpeg.txt 
然后

您也可以一次性获得相同的结果:

convert  original.jpeg  -resize 1x1  txt:-

  # ImageMagick pixel enumeration: 1,1,255,srgb
  0,0: (130,113,108)  #82716C  srgb(130,113,108)
通过这种方式,您可以在输入图像的原始颜色空间中获得“平均像素”的值,您可以评估其“亮度”(无论您如何定义)

您可以将图像转换为灰度,然后调整大小。这样,您将获得灰度值作为“亮度”的度量:

convert  original.jpeg  -colorspace gray  -resize 1x1  txt:-

  # ImageMagick pixel enumeration: 1,1,255,gray
  0,0: (117,117,117)  #757575  gray(117,117,117)
您还可以将图像转换为HSB空间(色调、饱和度、亮度),并执行相同的操作:

convert  original.jpeg  -colorspace hsb  -resize 1x1  txt:-

  # ImageMagick pixel enumeration: 1,1,255,hsb
  0,0: ( 61, 62,134)  #3D3E86  hsb(24.1138%,24.1764%,52.4941%)

您在这里看到的“亮度”值(或
134
86
52.4941%
)可能就是您想要知道的。

什么构成“暗”?你需要定义它。例如,如果结果低于给定的阈值,则可能意味着对所有像素进行平均,并将图像分类为“暗”。一旦你们有了自己的定义,你们就可以处理像素数据,并开始编写一些代码。这和感知亮度有关吗?我需要在屏幕模式下将一幅图像合成为多幅图像,但其中一些图像需要更暗,以使结果看起来更好。我想把我知道的“好图像”的亮度调暗,然后把亮度较小的图像调暗。但我得到了类似的结果,好的和坏的图像,有什么帮助吗?这是一个伟大的想法;我正在考虑用脚本编写一个壁纸自动更换器,它会考虑一天中的时间;夜间使用深色壁纸,白天使用明亮壁纸@y2josei您可以通过在更大的缩略图(而不是1x1)上应用某种统计分布分析,使其更聪明;不过,还有更多内容需要编写。
convert  original.jpeg  -colorspace hsb  -resize 1x1  txt:-

  # ImageMagick pixel enumeration: 1,1,255,hsb
  0,0: ( 61, 62,134)  #3D3E86  hsb(24.1138%,24.1764%,52.4941%)