Код Python для изображения вычитает последовательные изображения

#python #image #subtraction

#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
 

Комментарии:

1. Не могли бы вы включить свой код и то, что вы пробовали до сих пор?

2. Я добавил изображение кода в описание выше. Он связан с частью, которая гласит «введите описание изображения здесь».

3. Пожалуйста, добавьте код в виде текста вместо этого

4. Просто добавил его как текст!

Ответ №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)
 

Обратите внимание, что if directory не находится в текущем каталоге, вы должны передать полный путь к изображениям cv2.imread . Кроме того, вы должны преобразовать изображения float_ в, чтобы избежать переполнения / переполнения целых чисел при добавлении / вычитании np.uint8 изображений.

Комментарии:

1. Это не сработало. Считаете ли вы, что файл изображения нечитаем, как только он становится частью списка? Для всех максимальных значений вычитаний изображений выводится значение «нет». Он должен дать мне либо значение 0, либо 255.

2. Я только что понял, почему мой код не сработал. Пожалуйста, посмотрите мой отредактированный ответ.