使用命令行 ImageMagick 检测图像饱和度并输出到 JSON
Detecting images saturation level with command line ImageMagick and outputting to JSON
我正在尝试获取图像的饱和度,以计算它是否更接近灰度或彩色。这需要适用于任何图像文件格式。我还需要能够获取其他信息,包括文件类型、mime 类型、宽度、高度,可能还有感知散列时刻。它还需要保留 JSON 输出。
目前我正在使用 convert image.png json:-
输出几乎所有我需要的数据,图像饱和度除外。我试过 convert image.png -colorspace HSL json:-
,假设它会将通道从红色、绿色和蓝色(和灰色)更改为色调、饱和度和亮度,但它仍然是前者。
使用 RGB 色彩空间时,灰度图像 return 只有两个 channelStatistics,alpha 和灰色,而彩色图像 returns alpha,红色,绿色和蓝色。使用 HSL 时,它 returns alpha、red、green 和 blue 用于灰度和颜色,格式如下(这是一个灰度示例):
[channelStatistics] -> Object
(
[alpha] => stdClass Object
(
[min] => 255
[max] => 255
[mean] => 255
[standardDeviation] => 0
[kurtosis] => 0
[skewness] => 0
)
[red] => stdClass Object
(
[min] => 0
[max] => 0
[mean] => 0
[standardDeviation] => 0
[kurtosis] => 0
[skewness] => 0
)
[green] => stdClass Object
(
[min] => 0
[max] => 0
[mean] => 0
[standardDeviation] => 0
[kurtosis] => 0
[skewness] => 0
)
[blue] => stdClass Object
(
[min] => 20
[max] => 255
[mean] => 230.007
[standardDeviation] => 44.1297
[kurtosis] => 2.21673
[skewness] => -1.80749
)
)
什么命令会 return 我需要的信息?我不想改变原始图像;它需要保持不变。我只需要了解这些特定的细节。
当你
convert input.png -colorspace hsl json:
输出实际上是在 HSL 中,只是有点误导,标记为红色、绿色和蓝色。
您可以通过创建一个几乎是红色但有一点变化的图像来测试它,这样 IM 就无法将它编码为像这样的调色图像:
convert -size 1000x1000 gradient:"rgb(255,0,0)-rgb(230,10,0)" input.png
现在,如果您查看 JSON,它看起来像这样 - 基本上完全饱和的亮红色
"channelStatistics": {
"red": {
"min": "59110",
"max": "65535",
"mean": "62322.5",
"standardDeviation": "1856.6",
"kurtosis": "-1.19999",
"skewness": "1.52719e-06"
},
"green": {
"min": "0",
"max": "2570",
"mean": "1285",
"standardDeviation": "742.641",
"kurtosis": "-1.19999",
"skewness": "0"
},
"blue": {
"min": "0",
"max": "0",
"mean": "0",
"standardDeviation": "0",
"kurtosis": "0",
"skewness": "0"
}
},
如果您转换为 HSL
convert input.png -colorspace hsl json:
现在看起来像这样:
"channelStatistics": {
"red": {
"min": "0",
"max": "475",
"mean": "229.308",
"standardDeviation": "137.131",
"kurtosis": "-1.19385",
"skewness": "0.071888"
},
"green": {
"min": "65535",
"max": "65535",
"mean": "65535",
"standardDeviation": "0",
"kurtosis": "0",
"skewness": "0"
},
"blue": {
"min": "29555",
"max": "32768",
"mean": "31161.5",
"standardDeviation": "928.298",
"kurtosis": "-1.20001",
"skewness": "1.58408e-08"
}
},
可能卖出为红色、绿色和蓝色,但实际上"Red"是接近的Hue为零,即红色,"Green" 实际上是 Saturation,你可以看到它完全饱和,"Blue" 是 Lightness 是中灰色。
我正在尝试获取图像的饱和度,以计算它是否更接近灰度或彩色。这需要适用于任何图像文件格式。我还需要能够获取其他信息,包括文件类型、mime 类型、宽度、高度,可能还有感知散列时刻。它还需要保留 JSON 输出。
目前我正在使用 convert image.png json:-
输出几乎所有我需要的数据,图像饱和度除外。我试过 convert image.png -colorspace HSL json:-
,假设它会将通道从红色、绿色和蓝色(和灰色)更改为色调、饱和度和亮度,但它仍然是前者。
使用 RGB 色彩空间时,灰度图像 return 只有两个 channelStatistics,alpha 和灰色,而彩色图像 returns alpha,红色,绿色和蓝色。使用 HSL 时,它 returns alpha、red、green 和 blue 用于灰度和颜色,格式如下(这是一个灰度示例):
[channelStatistics] -> Object
(
[alpha] => stdClass Object
(
[min] => 255
[max] => 255
[mean] => 255
[standardDeviation] => 0
[kurtosis] => 0
[skewness] => 0
)
[red] => stdClass Object
(
[min] => 0
[max] => 0
[mean] => 0
[standardDeviation] => 0
[kurtosis] => 0
[skewness] => 0
)
[green] => stdClass Object
(
[min] => 0
[max] => 0
[mean] => 0
[standardDeviation] => 0
[kurtosis] => 0
[skewness] => 0
)
[blue] => stdClass Object
(
[min] => 20
[max] => 255
[mean] => 230.007
[standardDeviation] => 44.1297
[kurtosis] => 2.21673
[skewness] => -1.80749
)
)
什么命令会 return 我需要的信息?我不想改变原始图像;它需要保持不变。我只需要了解这些特定的细节。
当你
convert input.png -colorspace hsl json:
输出实际上是在 HSL 中,只是有点误导,标记为红色、绿色和蓝色。
您可以通过创建一个几乎是红色但有一点变化的图像来测试它,这样 IM 就无法将它编码为像这样的调色图像:
convert -size 1000x1000 gradient:"rgb(255,0,0)-rgb(230,10,0)" input.png
现在,如果您查看 JSON,它看起来像这样 - 基本上完全饱和的亮红色
"channelStatistics": {
"red": {
"min": "59110",
"max": "65535",
"mean": "62322.5",
"standardDeviation": "1856.6",
"kurtosis": "-1.19999",
"skewness": "1.52719e-06"
},
"green": {
"min": "0",
"max": "2570",
"mean": "1285",
"standardDeviation": "742.641",
"kurtosis": "-1.19999",
"skewness": "0"
},
"blue": {
"min": "0",
"max": "0",
"mean": "0",
"standardDeviation": "0",
"kurtosis": "0",
"skewness": "0"
}
},
如果您转换为 HSL
convert input.png -colorspace hsl json:
现在看起来像这样:
"channelStatistics": {
"red": {
"min": "0",
"max": "475",
"mean": "229.308",
"standardDeviation": "137.131",
"kurtosis": "-1.19385",
"skewness": "0.071888"
},
"green": {
"min": "65535",
"max": "65535",
"mean": "65535",
"standardDeviation": "0",
"kurtosis": "0",
"skewness": "0"
},
"blue": {
"min": "29555",
"max": "32768",
"mean": "31161.5",
"standardDeviation": "928.298",
"kurtosis": "-1.20001",
"skewness": "1.58408e-08"
}
},
可能卖出为红色、绿色和蓝色,但实际上"Red"是接近的Hue为零,即红色,"Green" 实际上是 Saturation,你可以看到它完全饱和,"Blue" 是 Lightness 是中灰色。