在OpenCV中加载和保存图像非常有限,所以...从给定文件夹加载所有图像的首选方法是什么?我应该使用.png或.jpg扩展名搜索该文件夹中的文件,存储名称并对每个文件使用imread
吗?或者有更好的方法吗?
答案 0 :(得分:23)
为什么不尝试加载文件夹中的所有文件?如果OpenCV无法打开它,哦。继续下一步。如果无法打开图片,则cv2.imread()
会返回None
。有点奇怪,它没有引起异常。
import cv2
import os
def load_images_from_folder(folder):
images = []
for filename in os.listdir(folder):
img = cv2.imread(os.path.join(folder,filename))
if img is not None:
images.append(img)
return images
答案 1 :(得分:10)
我用了skimage。您可以使用标准方式创建集合和访问元素,即col [index]。这将为您提供RGB值。
from skimage.io import imread_collection
#your path
col_dir = 'cats/*.jpg'
#creating a collection with the available images
col = imread_collection(col_dir)
答案 2 :(得分:8)
import glob
cv_img = []
for img in glob.glob("Path/to/dir/*.jpg"):
n= cv2.imread(img)
cv_img.append(n)`
答案 3 :(得分:7)
你也可以使用matplotlib来试试这个:
import matplotlib.image as mpimg
def load_images(folder):
images = []
for filename in os.listdir(folder):
img = mpimg.imread(os.path.join(folder, filename))
if img is not None:
images.append(img)
return images
答案 4 :(得分:5)
你可以使用glob函数来做到这一点。见例子
import cv2
import glob
for img in glob.glob("path/to/folder/*.png"):
cv_img = cv2.imread(img)
答案 5 :(得分:0)
要添加到Rishabh的答案中,并使其能够处理不是在该文件夹中找到的图像的文件。
import matplotlib.image as mpimg
images = []
folder = './your/folder/'
for filename in os.listdir(folder):
try:
img = mpimg.imread(os.path.join(folder, filename))
if img is not None:
images.append(img)
except:
print('Cant import ' + filename)
images = np.asarray(images)
答案 6 :(得分:0)
如果所有图像的格式相同:
import cv2
import glob
images = [cv2.imread(file) for file in glob.glob('path/to/files/*.jpg')]
用于读取不同格式的图像:
import cv2
import glob
imdir = 'path/to/files/'
ext = ['png', 'jpg', 'gif'] # Add image formats here
files = []
[files.extend(glob.glob(imdir + '*.' + e)) for e in ext]
images = [cv2.imread(file) for file in files]
答案 7 :(得分:0)
import os
import cv2
rootdir = "directory path"
for subdir, dirs, files in os.walk(rootdir):
for file in files:
frame = cv2.imread(os.path.join(subdir, file))
答案 8 :(得分:-1)
import cv2 as cv
import glob
images = glob.glob("*.jpg")
for image in images:
img = cv.imread(image, 1)