我试图在PHP中完成GD或ImageMagick如下:
我有一个大的图像(比如说2000 x 2000像素)..我想检查是否有第二个较小的图像(例如50 x 50像素)出现在较大的图像中,以及该区域匹配的百分比。例如,在大图的那个地方,有95%的小图像匹配。
这可能吗?这是如何实现的呢?
谢谢! !
我快速查看了PHP的ImageMagick和GD,两者都没有内置这样做的方式。一种方法是使用ImageMagick将较大的图像划分为较小的图像(与较小的图像大小相同),并开始将它们与较小的图像进行比较。
然而,我想这将是非常缓慢的。
如果在PHP代码中使用系统调用,可以使用imagemagick实现这一点。我不知道你是否想尝试一下,但这是如何做到的:
<?php
//set a bigger time out limit because comparison takes a while
set_time_limit ( 275 ) ;
//the bigger image
$bigimage = "big.bmp";
//the smaller image
$smallimage = "small.bmp";
//result image
$resimg = "/tmp/similarity";
//system call
$output = shell_exec("(compare -metric AE -subimage-search ".$bigimage." ".$smallimage." ".$resimg." > /dev/null) 3>&1 1>&2 2>&3");
//result is something like "0 @ 251,263"
$res = explode("@",$output);
if($res[0]==0)
{
echo "Perfect match<br/>";
$res = explode(",",$res[1]);
echo "width: ".$res[0];
echo "<br/>";
echo "height: ".$res[1];
} else {
echo "Not match";
}
?>
我已经在XAMPP for linux 1.7.3a和ImageMagick 6.7.1-0 2011-07-10 Q16的linux盒子中测试了上面的代码。
关于比较,我使用度量AE(绝对误差)来计算有多少像素不同。结果被打印到错误流(STERR)。关于imagemagick的子图像搜索的更多信息可以在这里找到。
祝你好运
这是c#的一个很好的答案:如何在另一个图像中找到一个图像?
虽然我很确定它也可以用于PHP,因为它只是一个通用算法,但使用PHP进行图像比较是一个非常糟糕的主意。
也可参考维基百科模板匹配文章
OK。如果你有$BigImage和$SmallImage.
并且您根据$大图像和$小图像制作$Final图像。然后您可以使用以下函数检查:http://www.php.net/manual/en/function.getimagesize.php
如果你只有$FinalImage,并且你想在$Final image中跟踪$smallimage基数,那么在PHP中"NO WAY"
Java。
^ _ ^