import cv2
# 读取视频
video = cv2.VideoCapture('input.mp4') # 用你的视频文件名替换 'input.mp4'
count = 0
frame_skip = 3 # 每3帧保存一次
while True:
success, frame = video.read()
# 当读取不成功时,例如到达视频的结尾,退出循环
if not success:
break
if count % frame_skip == 0: # 每3帧保存一次
cv2.imwrite('frame{}.jpg'.format(count), frame)
count += 1
video.release()
cv2.destroyAllWindows()
import cv2
import os
import re
def atoi(text):
return int(text) if text.isdigit() else text
def natural_keys(text):
return [atoi(c) for c in re.split('(\d+)', text)]
image_folder = '.' # 图片所在的文件夹
video_name = 'output.avi'
images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]
images.sort(key=natural_keys)
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape
video = cv2.VideoWriter(video_name, 0, 1, (width,height))
for image in images:
video.write(cv2.imread(os.path.join(image_folder, image)))
cv2.destroyAllWindows()
video.release()
'''
功能:将视频逐帧抽取,在文件夹中保存为图片,可设置间隔帧数进行抽取,可设置图片名
'''
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)