# 导入所有必要的库
import cv2
import os
# 传入视频的名字,xxx.mp4
from tqdm import tqdm
def from_viedo_get_frame(video_name):
# 路径定义
pwd_dir=r"D:\desk\test_django\test\Videos\IR"
video_dir=os.path.join(pwd_dir,"Videos")
cut_images_dir=os.path.join(pwd_dir,"Cut_Images")
# 保存图片名字
img_name=video_name.split(".")[0]
save_img_dir_p=os.path.join(cut_images_dir,img_name)
save_img_dir=os.path.join(save_img_dir_p,"imgs")
save_label_dir=os.path.join(save_img_dir_p,"labels")
# 指定的路径读取视频
cam = cv2.VideoCapture(os.path.join(video_dir,video_name))
# 创建名为data的文件夹
try:
if not os.path.exists(save_img_dir):
os.makedirs(save_img_dir)
if not os.path.exists(save_label_dir):
os.makedirs(save_label_dir)
# 如果未创建,则引发错误
except OSError:
print('Error: Creating directory of data')
# frame
currentframe = 0
while (True):
# reading from frame
ret, frame = cam.read()
if ret:
# 如果视频仍然存在,继续创建图像
save_img_path=os.path.join(save_img_dir,"{}_{}.jpg".format(str(img_name),str(currentframe)))
# 增加计数器,以便显示创建了多少帧
currentframe += 1
# 自定义隔多少帧抽一帧
if currentframe % 1==0:
# 写入提取的图像
cv2.imwrite(save_img_path, frame)
else:
break
# 一旦完成释放所有的空间和窗口
cam.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
# 需要被抽帧的视频
video_list=["fushi_30_1.mp4","fushi_30_2.mp4","fushi_30_3.mp4","yangshi_30_1.mp4", "yuan2jing_1"]
for video in tqdm(video_list):
video_name=f"{video}.mp4"
from_viedo_get_frame(video_name)
OpenCV——视频抽帧
于 2024-07-02 13:41:45 首次发布