如何将拉普拉斯算子应用于文件夹中的每个图像



我在一个文件夹中有多个图像,我想对它们进行处理并应用一些OpenCV函数。我试图为文件夹中的每个图像找到一个拉普拉斯算子,但我能够一次处理一个。

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('xyz.jpg',0)
laplacian = cv2.Laplacian(img,cv2.CV_64F)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)
plt.subplot(2,2,1),plt.imshow(img,cmap = 'gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,2),plt.imshow(laplacian,cmap = 'gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
plt.show()

可以将代码重构为一个函数,并在多个文件路径上循环该函数。

from pathlib import Path
import cv2
import numpy as np
from matplotlib import pyplot as plt

def process(filepath):
img = cv2.imread(filepath, 0)
laplacian = cv2.Laplacian(img,cv2.CV_64F)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)
plt.subplot(2,2,1),plt.imshow(img,cmap = 'gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,2),plt.imshow(laplacian,cmap = 'gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
plt.show()

for filepath in Path("path/to/images").glob("*.jpg"):
print(f"Processing {filepath}")
process(filepath)

实现这一点的最简单方法是使用for循环

import os
from glob import glob
BASE_PATH = os.path.dirname(os.path.realpath(__file__))
IMGS_PATH = os.path.join(BASE_PATH, '*.jpg')
for path in glob(IMGS_PATH):
img = cv2.imread(path)
# processing

如果你有大量的数据,这可能不是最有效的方法,在这种情况下,我可能会寻找一个像Keras一样进行并行图像加载的库。

最新更新