python - 使用OpenCV比较图像

标签 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

最佳答案

可能是由于您要减去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

关于python - 使用OpenCV比较图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53127282/

相关文章:

python - pip 无法安装包 - Dockerfile

python - celery.utils.log.ProcessAwareLoggerobject 在 logging.Logger.manager.loggerDict 中做什么

python - 从图像中裁剪圆形缩略图的最简单方法是什么?

python - OpenCV-Python : How Do I split an Image in a grid?

delphi - 如何使用 Windows CopyMemory 函数复制 TBitmap 内存

python - 如何从以色列统计局网络查询工具中抓取数据?

python - 在 lxml 中使用 etree 时出错

algorithm - 我在哪里可以学习/找到使用 OpenCV 从 Kinect 流式传输的手势识别示例?

Android JNI C++ 段错误

python-2.7 - Python Opencv 2.4.X 摄像机错误