我想在PHP中比较两个图像。如果它们是95%或更高相似,那么结果应该只是显示文本是。如果它们不相似,结果应为否。 所以
if ( )
{
echo "Yes";
}
else
{
echo "No";
}
到目前为止,这是我找到的任何方式。 http://pastebin.com/wgeu2DqE 我想在你找到它的地方给你,但你必须注册。
现在我有了加载图像的功能
function LoadPNG($imgname)
{
/* Attempt to open */
$im = @imagecreatefrompng($imgname);
/* See if it failed */
if(!$im)
{
/* Create a blank image */
$im = imagecreatetruecolor(150, 30);
$bgc = imagecolorallocate($im, 255, 255, 255);
$tc = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
/* Output an error message */
imagestring($im, 1, 5, 5, 'Error loading ' . $imgname, $tc);
}
return $im;
}
我一直在尝试用我的记事本++和phpdesigner来提出一些东西,但是我得到了错误。我不是一个php开发者,所以我向你们寻求帮助。我只需要比较两个图像和是或否。所以这很容易。我也看到了这一点但却无法理解。
感谢。
答案 0 :(得分:1)
您可以通过多种方式进行比较,具体取决于您想要的比较类型和用例。 “相似”是一个非常模糊的术语。
有图像比较库,或者您可以使用ImageMagick功能。甚至还有OpenCV与PHP一起使用的绑定。
当然,方法越复杂,结果越灵活,越好。
如果您要比较两张应该相等且不相同的图像(例如,两个监视相框),您可以使用下面给出的DIY方法。
如果色调和光度(例如噪音)出现扭曲,那么DIY方法将无效,但ImageMagick会产生良好的效果。
最后,如果您尝试映射同一对象的两个视图,例如从一个向左平移一只脚的相机,或者你正在寻找一个“内部”另一个等的图像,然后OpenCV是这三个中唯一可行的选择。
对于最简单的情况,自己动手的方法可能是首先检查两个图像的宽高比,然后将两者缩小到相同的大小(您可以进一步减少它们) (比如,比例1:4)来过滤掉小的差异和/或减少前面的工作。
此时,您可以使用getColorAt
逐个像素地比较两个图像(并且还可以选择转换为灰度以忽略色调的差异)。两个像素之间的距离也可以用几种方式计算(例如用CIE perceptual functions),或者你可以使用欧几里德距离 - SQRT((r1-r2)* 2 +(g1-g2) * 2 +(b1-b2)** 2)。
距离范围为0到W * H * 255 * SQRT(3);您可以将这些值线性映射到0-100%的范围。
这可以很容易地告诉您图像与相同图像之间的差异,并在其上绘制一些线条。如果您扭曲图像(例如使用“捏合”滤镜),或稍微旋转一下,生成的图像将显示95%,甚至99%相同,但此算法可以很好地报告非常低的匹配(对于照片质量图片,连续的音调,匹配仍然是好的。对于漫画,它将是非常差的。)