1.视频抽帧
''' 功能:将视频逐帧抽取,在文件夹中保存为图片,可设置间隔帧数进行抽取,可设置图片名 ''' import cv2 def video2images(Video_Dir): cap = cv2.VideoCapture(Video_Dir) c = 1 # 帧数起点 index = 1 # 图片命名起点,如1.jpg if not cap.isOpened(): print("Cannot open camera") exit() while True: # 逐帧捕获 ret, frame = cap.read() # 如果正确读取帧,ret为True if not ret: print("Can't receive frame.") break # 设置每5帧取一次图片,若想逐帧抽取图片,可设置c % 1 == 0 if c % 5 == 0: # 图片存放路径,即图片文件夹路径 路径不能出现中文 cv2.imwrite("C:/Users/Desktop/class_actions/images/" + str(index) + '.jpg', frame) index += 1 c += 1 cv2.waitKey(1) # 按键停止 if cv2.waitKey(1) == ord('q'): break cap.release() # 视频存放路径 路径不能出现中文 Video_Dir = r"C:\Users\Desktop\class_actions\videos\1.mp4" video2images(Video_Dir)
1.视频抽帧另一种方法
''' 功能:将视频逐帧抽取,在文件夹中保存为图片,可设置间隔帧数进行抽取,可设置图片名 ''' import cv2 def video2images(Video_Dir): cap = cv2.VideoCapture(Video_Dir) c = 1 # 帧数起点 index = 1 # 图片命名起点,如1.jpg if not cap.isOpened(): print("Cannot open camera") exit() while True: # 逐帧捕获 ret, frame = cap.read() # 如果正确读取帧,ret为True if not ret: print("Can't receive frame.") break # 设置每5帧取一次图片,若想逐帧抽取图片,可设置c % 1 == 0 if c % 5 == 0: # 图片存放路径,即图片文件夹路径 cv2.imwrite('D:/mymodel/dataset/data/' + str(index) + '.jpg', frame) index += 1 c += 1 cv2.waitKey(1) # 按键停止 if cv2.waitKey(1) == ord('q'): break cap.release() Video_Dir = "D:\mymodel\dataset\data.mp4" # 视频存放路径 video2images(Video_Dir)
2.图片合成视频
import cv2
import os
def images_to_video(image_folder_path, output_video_name, fps):
images = [img for img in os.listdir(image_folder_path) if img.endswith(".png") or img.endswith(".jpg")]
frame = cv2.imread(os.path.join(image_folder_path, images[0]))
height, width, layers = frame.shape
video = cv2.VideoWriter(output_video_name, cv2.VideoWriter_fourcc(*'XVID'), fps, (width, height))
for image in images:
video.write(cv2.imread(os.path.join(image_folder_path, image)))
cv2.destroyAllWindows()
video.release()
# 使用函数
image_folder_path = "/home/uto/vis_1/vis_1/" # 请将这里替换为你的图片文件夹路径
output_video_name = "/home/uto/vis_1/a.mp4" # 请将这里替换为你想要输出的视频文件名
fps = 30 # 视频帧率,你可以根据需要调整
images_to_video(image_folder_path, output_video_name, fps)