gpt4 book ai didi

php - imagick/php - 检查图片之间的差异和变化的判断

转载 作者:行者123 更新时间:2023-12-04 20:51:17 24 4
gpt4 key购买 nike

我有两张图片(第一个和第二个链接)。

First image

Second image

Third image

第三张图片由 imagick 生成,代码:

$image1 = new \imagick(dirname(dirname(dirname(__DIR__))) . "/1.jpg");
$image2 = new \imagick(dirname(dirname(dirname(__DIR__))) . "/2.jpg");

$result = $image1->compareImages($image2, \Imagick::METRIC_MEANSQUAREERROR);
$result[0]->setImageFormat("jpg");

header("Content-Type: image/jpeg");
echo $result[0];
exit();

我可以用不同的方式表示变化吗?例如,差异标记为红色框。

最佳答案

这实际上很重要 :-) 有几个问题,首先您需要确定差异 - 您可以通过差分(-compose difference)来做到这一点。然后你需要根据它们的不同程度来阈值差异,但是因为你使用的是有损的 JPEG,所以每个像素都有量化结束编码差异。一旦你有了差异,你需要勾勒出它们 - 但如果你天真地勾勒出它们,你会在每个不同的单个像素周围得到一个框,而不是每个形状周围都有一个框,所以你需要做一些模糊和阈值处理(或其他东西else) 将附近的差异合并为单个 block 。找到 block 后,您需要在它们周围放置一个框架 - 您可以进行 “连通分量分析” 或其他方法来找到 block 的边缘 - 我选择了 “边缘出形态学”。然后您需要为边缘着色并将它们合成回原始图像的顶部。该命令在命令行中看起来像这样:

convert a.jpg \
\( +clone b.jpg -compose difference -composite \
-threshold 1% -separate -evaluate-sequence Add \
-blur 0x5 -threshold 10% \
-morphology edgeout diamond:3 \
-fill red -opaque white -transparent black -write mask.png \) \
-compose srcover -composite result.png

enter image description here

当然,根据您将轮廓合成到原始两张图片中的哪一张上,它看起来当然会有所不同 - 我选择合成到第一张上,但您可以选择第二张。

我将掩码写到文件 mask.png 中,这样你就可以看到我在括号内实际构建的内容,我在它周围加了一个边框,这样你就可以在下面看到它:

enter image description here

这是您可以尝试的另一种变体 - 很难知道什么最适合您的所有图像:-)

convert a.jpg \
\( +clone b.jpg -compose difference -composite -threshold 1% \
-statistic maximum 25x25 \
-morphology edgeout diamond:5 \
-fill red -opaque white -transparent black -write mask.png \
\) -compose srcover -composite result.png

关于php - imagick/php - 检查图片之间的差异和变化的判断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32370923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com