#python #image #numpy #difference
#python #изображение #numpy #разница
Вопрос:
Я сделал несколько скриншотов с веб-камеры в моем кампусе, и я сделал в среднем 300 скриншотов, и это дает мне изображение со многими призрачными людьми. Я пытаюсь выяснить, как получить изображение разницы между изображениями, чтобы я мог изменить различия на красный, чтобы показать более четко. Мне просто нужна помощь, чтобы понять, с чего начать. Я знаю, что мне нужно вычесть первое изображение на второе, а затем это изображение на третье, но я не уверен, как это сделать в Python.
import os, os.path, time
import matplotlib.pyplot as mplot
from PIL import Image
import numpy as np
files=os.listdir('./images')
print files
image=[]
for file in files:
img=Image.open('./images/' file)
img=np.float32(img)
image.append(img)
avg_img=[]
for img in image:
try:
avg_img =img
except:
avg_img=img
avg_img/=len(image)
avg_img=np.clip(avg_img, 0, 255)
avg_img=np.uint8(avg_img)
mplot.imshow(avg_img)
mplot.show()
Ответ №1:
Существует множество способов сделать это, но сначала я буду придерживаться того, что у вас есть в данный момент. Затем я покажу более компактный способ.
import os, os.path, time
import matplotlib.pyplot as mplot
from PIL import Image
import numpy as np
files=os.listdir('./images')
print files
image=[]
for file in files:
img=Image.open('./images/' file)
img=np.float32(img)
image.append(img)
avg_img=np.zeros_like(image[0])
for img in image:
avg_img = img
avg_img/=len(image)
avg_img=np.clip(avg_img, 0, 255)
avg_img=np.uint8(avg_img)
mplot.imshow(avg_img)
mplot.show()
# get series of differences
differences = []
for img0, img1 in zip(image[:-1], image[1:]):
differences.append(img1 - img0)
Вот более простой способ с использованием numpy.
import os, os.path, time
import matplotlib.pyplot as mplot
from PIL import Image
import numpy as np
files = os.listdir('./images')
print files
img = Image.open(os.path.join('./images', files[0])
image_stack = np.ndarray((len(files), img.shape[0], img.shape[1], 3), dtype=np.float32)
for i, file in enumerate(files):
img = Image.open('./images/' file)
img = np.float32(img)
image_stack[i] = img
avg_img = np.mean(image_stack, axis=0)
avg_img = np.clip(avg_img, 0, 255)
avg_img = avg_img.astype(np.uint8)
mplot.imshow(avg_img)
mplot.show()
difference_stack = image_stack[1:] - image_stack[:-1]
Я сомневаюсь, что ваше изображение с веб-камеры хранит поплавки, но, возможно, это так.