Python 图像减去连续图像的代码

Python Code to image subtract consecutive images

我有一堆名为 0.jpg1.jpg2.jpg 等的图像。我正在尝试创建一个代码来减去连续的图像。我记下了减法代码,但我似乎无法弄清楚如何遍历包含所有这些图像的文件夹以进行连续图像减法,例如:0.jpg - 1.jpg, 1.jpg - 2.jpg, 2.jpg - 3.jpg, 等等

import cv2
import numpy as np
from numpy import asarray
from PIL import Image, ImageOps
import os

directory ='/home/pi/Desktop/tryy'

filelist = os.listdir(directory)
filelists = sorted(filelist,key=lambda x:int(os.path.splitext(x)[0]))

for i in filelists:
    i = 0
    imgX = cv2.imread(filelists[i])
    imgY = cv2.imread(filelists[i+1])
    imgZ = cv2.absdiff(imgX, imgY)
    
    thresh = cv2.threshold(imgZ,30, 255, cv2.THRESH_BINARY)[1]
    np.set_printoptions(threshold=np.inf)
    data = asarray(thresh)
    print(data)

#Movement Output
    Maximum = np.max(data)
    print(Maximum)

    if Maximum == 255:
        print("Movement")
    else:
        print("No Movement")
    i= i+1

您可以像这样使用内置的 zip 函数:

for x, y in zip(filelists[:-1], filelists[1:]):
    imgX = cv2.imread(os.path.join(directory, x)).astype(np.float_)
    imgY = cv2.imread(os.path.join(directory, y)).astype(np.float_)
    imgZ = cv2.absdiff(imgX, imgY)

请注意,如果 directory 不在当前目录中,您必须将图像的完整路径传递给 cv2.imread。此外,您应该将图像转换为 float_ 以避免在 adding/subtracting np.uint8 图像时出现整数 overflow/underflow。