【问题标题】:How to determine if image is dark? (high contrast, low brightness)如何判断图像是否暗? (高对比度,低亮度)
【发布时间】:2011-10-28 23:14:24
【问题描述】:

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

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

【问题讨论】:

  • 什么是“黑暗”?你需要定义它。例如,如果结果低于给定阈值,这可能意味着您平均所有像素并将图像归类为“暗”。一旦你有了定义,你就可以处理像素数据并开始编写一些代码了。

标签: image graphics image-processing imagemagick


【解决方案1】:

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

 convert  original.jpeg  -resize 1x1  1pixel-original.jpeg

然后首先调查那个单个像素的颜色

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

然后

cat 1pixel-jpeg.txt

  # ImageMagick pixel enumeration: 1,1,255,srgb
  0,0: (130,113,108)  #82716C  srgb(130,113,108)

你也可以一口气得到同样的结果:

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#8652.4941%)可能是您想知道的。

【讨论】:

  • 这是否适用于感知光度?我需要将屏幕模式下的图像合成为多张图像,但其中一些需要更暗以使结果看起来不错。我想采用我知道的“好图像”的亮度,然后使那些亮度较小的图像变暗。但是我得到了相似的结果,有好的和坏的图像,有什么帮助吗?
  • 这是个好主意;我正在考虑编写一个壁纸自动更换器的脚本,它会考虑到一天中的时间;夜间的深色壁纸和白天的明亮壁纸。 @y2josei,您可以通过在更大的缩略图而不是 1x1 上应用某种统计分布分析来使其更聪明;不过要编写更多脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 2021-08-07
相关资源
最近更新 更多