python - 图像减去连续图像的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
解决方案
您可以像这样使用内置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
图像时整数溢出/下溢。
推荐阅读
- c# - 不要在第一个日期范围中包含第二个日期范围
- mysql - 如何更改语法 SQL 访问 phpmyadmin SQL/SQL 服务器
- java - 如何在最新版本的 Eclipse IDE 中用 Java 创建小程序?
- c - eiffel c编译失败:错误LNK2001:未解析的外部符号
- git - 如何使用 sha of commit 在 github 上创建新分支
- php - apache崩溃不适用于php框架
- python - Python 在 IDLE 中重新启动 shell
- angular - Angular 7 Universal - 无法解析路径
- angular - 如何将json响应分配给Angular 4中的数组
- python - 在 urls.py 中使用多个 slug