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



我有一堆名为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。此外,在加减np.uint8图像时,应将图像转换为float_,以避免整数上溢/下溢。

最新更新