使用ImageMagick计算PNG图像中的对象数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ImageMagick计算PNG图像中的对象数相关的知识,希望对你有一定的参考价值。
我试图计算图像中的对象数量
使用php魔术功能后,我可以将其转换为二进制图像
我需要的是一个在这种情况下返回图像中白色物体数量的函数8我不太了解图像但是在imagemagic上有一个删除的帖子使用以下命令
var_dump(
exec("convert out.pbm -define connected-components:verbose=true -define connected-components:area-threshold=50 -connected-components 4 -auto-level -depth 8 test.png")
);
你的ImageMagick版本是什么?连接组件至少需要6.8.9.10版。取出并将其全部排成一行。使用新行可能会混淆PHP exec()。
以这种方式尝试并将区域阈值增加到150:
<?php
exec("convert out.pbm -define connected-components:verbose=true -define connected-components:area-threshold=150 -connected-components 4 -auto-level -depth 8 test.png 2>&1",$out,$returnval);
foreach($out as $text)
{echo "$text<br>";}
?>
它应该返回:
Objects (id: bounding-box centroid area mean-color):
22: 665x500+0+0 332.0,241.1 295195 gray(0)
7605: 125x101+86+380 150.6,431.3 10246 gray(255)
6995: 139x105+476+350 541.7,401.0 10087 gray(255)
5560: 94x62+133+233 182.0,265.4 4622 gray(255)
5196: 106x61+434+217 483.3,246.8 4608 gray(255)
3470: 76x42+162+145 201.4,164.9 2448 gray(255)
3023: 76x40+401+126 438.7,145.5 2391 gray(255)
1420: 58x28+186+75 215.5,88.7 1315 gray(255)
992: 61x24+385+64 414.3,75.7 1146 gray(255)
2: 33x18+0+0 12.9,6.6 391 gray(0)
如果您只想要没有图像的列表,可以将test.png替换为null:。
如果您希望输出为二进制而不是为id编号进行灰度编码,则添加-define connected-components:mean-color = true:
<?php
exec("convert out.pbm -define connected-components:verbose=true -define connected-components:area-threshold=150 -define connected-components:mean-color=true -connected-components 4 -auto-level -depth 8 test.png 2>&1",$out,$returnval);
foreach($out as $text)
{echo "$text<br>";}
?>
如果您只想要计数和二进制输出,请尝试:
<?php
exec("convert image.jpg -define connected-components:verbose=true -define connected-components:area-threshold=150 -define connected-components:mean-color=true -connected-components 4 -auto-level -depth 8 test.png 2>&1 | grep "gray(255)" | wc -l | sed 's/^[ ]*//' ",$out,$returnval);
foreach($out as $text)
{echo "$text<br>";}
?>
哪个应该返回8。
见https://www.imagemagick.org/script/connected-components.php
这似乎做你需要的:
<?php
$output=shell_exec("convert -size 1000x1000 xc:black -fill white -draw "rectangle 10,10 900,900" -define connected-components:verbose=true -connected-components 4 -auto-level -depth 8 test.png");
echo $output;
?>
一定要解析输出,如下所示:
Objects (id: bounding-box centroid area mean-color):
1: 891x891+10+10 455.0,455.0 793881 srgba(100%,100%,100%,1.08255)
0: 1000x1000+0+0 670.9,670.9 206119 srgba(0%,0%,0%,1.31795)
并注意颜色(如果你想要白色物体)以及区域 - 字段/列在第一行输出中标题/标记。所以你应该注意到有两个物体被检测到,第一个是白色和更小的物体,第二个是黑色和整个图像的大小。
以上是关于使用ImageMagick计算PNG图像中的对象数的主要内容,如果未能解决你的问题,请参考以下文章
使用 ImageMagick 将 gif 转换为 png 时出现“转换:不正确的图像标题”错误
使用ImageMagick调整索引的PNG图像大小,同时保留颜色贴图
当我只想在 JPG 和 PNG 之间转换时,为啥 ImageMagick 会改变图像亮度?