首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何量化两个图像之间的差异?

如何量化两个图像之间的差异?
EN

Stack Overflow用户
提问于 2008-10-10 10:39:34
回答 17查看 216.7K关注 0票数 203

这是我想要做的:

我每隔一段时间就用网络摄像头拍照。有点像是时间推移的东西。但是,如果没有什么真正的变化,也就是说,图片看起来几乎一样,我不想存储最新的快照。

我想有一些方法可以量化这种差异,我将不得不根据经验来确定一个阈值。

我追求的是简单而不是完美。我使用的是python。

EN

回答 17

Stack Overflow用户

发布于 2008-10-13 06:50:17

您可以使用PIL中的函数比较两个图像。

代码语言:javascript
复制
import Image
import ImageChops

im1 = Image.open("splash.png")
im2 = Image.open("splash2.png")

diff = ImageChops.difference(im2, im1)

diff对象是这样的图像,其中每个像素都是从第一图像中减去第二图像中该像素的颜色值的结果。使用diff图像,您可以做几件事。最简单的是diff.getbbox()函数。它将告诉您包含两个图像之间的所有更改的最小矩形。

您可能也可以使用PIL中的函数来实现这里提到的其他内容的近似值。

票数 67
EN

Stack Overflow用户

发布于 2008-10-10 03:37:57

一件微不足道的小事:

将两个图像重新采样为小的缩略图(例如,64 x 64),并将缩略图逐个像素与某个阈值进行比较。如果原始图像几乎相同,则重新采样的缩略图将非常相似,甚至完全相同。此方法会处理可能出现的噪波,特别是在低光场景中。如果使用灰度效果,效果可能会更好。

票数 14
EN

Stack Overflow用户

发布于 2018-03-30 21:00:09

另一种很好的、简单的方法来测量两个图像之间的相似性:

代码语言:javascript
复制
import sys
from skimage.measure import compare_ssim
from skimage.transform import resize
from scipy.ndimage import imread

# get two images - resize both to 1024 x 1024
img_a = resize(imread(sys.argv[1]), (2**10, 2**10))
img_b = resize(imread(sys.argv[2]), (2**10, 2**10))

# score: {-1:1} measure of the structural similarity between the images
score, diff = compare_ssim(img_a, img_b, full=True)
print(score)

如果其他人对一种更强大的比较图像相似性的方法感兴趣,我把tutorial和web app放在一起,用Tensorflow测量和可视化相似的图像。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/189943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档