使用OpenCV比较图像

时间:2018-11-03 00:20:35

标签: python opencv image-processing

我正在尝试使用OpenCV(和picamera)监视LCD的读数。 我正在阅读每秒的内容,希望图像在至少三帧(3秒)内相同。只是为了避免在有电灯开关或某些物体干扰图像的情况下分析图像的情况。

因此,我连续读取三个图像并通过打印计算它们之间的差异(img0,img1,img2是三个灰度连续图像):

> print(max(diff(img0,img1), diff(img1,img2), diff(img0, img2)))

其中

> def diff(image1, image2):
>     return abs(image1-image2).mean()

我还使用了 absdiff 函数,结果相似。 但是奇怪的是,当图像没有变化(对我来说是可见的)时,该值约为120-160。但是,当我关掉灯时,该值下降到110,然后上升到220。当我用手指指着框架时,该值仍然可以在120-160范围内。我想不出一个有意义的真实模式。也许问题在于晃动和许多逐像素差异加起来。 有更聪明的方法吗? 我附上一些示例图片。 frame 1

frame 2

frame 3

1 个答案:

答案 0 :(得分:2)

可能是由于您要减去类型为uint8的图像而引起的。任何负数将汇总为高值。例如,

> np.array([-3,-2,-1,0], dtype=np.uint8)
[253 254 255 0]

因此,image2函数中image1大于diff的任何像素都将具有较高的值。您可以先将其更改为float类型。使用前两个示例图像:

> print(diff(img0, img1))
209.93
> img0 = img0.astype(float)
> img1 = img1.astype(float)
> print(diff(img0, img1))
3.85