php代码计算灰度图片的平均值,php – 使用Imagick检测图像是灰度还是彩色

我正在尝试根据图像的“饱和度”为图像赋值,以查看图像是黑白还是彩色.我正在使用Imagick,并且发现了似乎是命令行的完美代码,并尝试使用

PHP库复制它.

我想我理解这个概念:

>将图像转换为HSL.

>提取’g’通道(HSL中的S通道).

>计算此渠道的平均值.

convert '$image_path' -colorspace HSL -channel g -separate +channel -format '%[fx:mean]' info:

我的PHP代码

$imagick = new Imagick($image_path);

$imagick->setColorspace(imagick::COLORSPACE_HSL);

print_r($imagick->getImageChannelMean(imagick::CHANNEL_GREEN));

产量

但是,我的PHP代码不会输出与命令行代码相同的值.例如,灰度图像为命令行代码给出0,但PHP代码给出[mean] => 10845.392051182 [standardDeviation] => 7367.5888849872.

类似地,另一个灰度图像给出0对[平均] => 31380.528443457 [standardDeviation] => 19703.501101904.

彩色图像给出0.565309对比[平均] => 33991.552881892 [standardDeviation] => 16254.018540044.

在不同的值之间似乎没有任何类型的模式.我做错了什么吗?

谢谢.

刚才补充一下,我也试过这个PHP代码

$imagick = new Imagick($image_path);

$imagick->setColorspace(imagick::COLORSPACE_HSL);

$imagick->separateImageChannel(imagick::CHANNEL_GREEN);

$imagick->setFormat('%[fx:mean]');

但是当我尝试设置格式时,我得到一个无法设置格式错误.我也尝试过setFormat(‘%[fx:mean] info:’),setFormat(‘%[mean]’),setFormat(‘%mean’)等.

更新 – 固定!

感谢@danack搞清楚我需要使用transformImageColorspace()而不是setColorspace().工作代码如下.

$imagick = new Imagick($image_path);

$imagick->transformImageColorspace(imagick::COLORSPACE_HSL);

$saturation_channel = $imagick->getImageChannelMean(imagick::CHANNEL_GREEN);

$saturation_level = $saturation_channel['mean']/65535;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值