首页 > 解决方案 > 图像减去连续图像的Python代码

问题描述

我有一堆名为0.jpg, 1.jpg,2.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

标签: pythonimagesubtraction

解决方案


您可以像这样使用内置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_,以避免在添加/减去np.uint8图像时整数溢出/下溢。


推荐阅读