python 读图片封装 支持 视频,图片文件夹,图片
2024.02.01更新
安装依赖项:pip install natsort
python
#-*-coding:utf-8-*-
import os.path
from natsort import natsorted
import cv2
class ImgReader:
def __init__(self, source, type='mp4'):
if source.endswith(".mp4"):
self.type = 'mp4'
self.cap = cv2.VideoCapture(source)
if not self.cap.isOpened():
raise ValueError(f"Error: Could not open video file at {source}")
self.total_frames = int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT))
elif os.path.isfile(source):
self.type = 'img'
elif os.path.isdir(source):
img_files = ['%s/%s' % (i[0].replace("\\", "/"), j) for i in os.walk(source) for j in i[-1] if j.endswith(('jpg', 'png', 'jpeg', 'JPG'))]
self.img_files= natsorted(img_files)
self.img_index = 0
self.type = 'dir_img'
self.total_frames = len(self.img_files)
self.source = source
def get_img(self):
if self.type == 'mp4':
ret, frame = self.cap.read()
if not ret:
self.cap.release()
return None
self.img_index += 1
return frame,self.img_index,None
elif self.type == 'img':
return cv2.imread(self.source),0,None
elif self.type == 'dir_img':
if self.img_index < 0 or self.img_index >= len(self.img_files):
return None
img_file = self.img_files[self.img_index]
img = cv2.imread(img_file)
self.img_index+=1
return img,self.img_index,img_file