video_depart.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. # 将视频图像分离为单帧序列
  2. import cv2
  3. import os
  4. import shutil
  5. def main():
  6. # 视频路径
  7. # TODO: 修改视频路径为自己的视频路径,每次指定一个视频
  8. path = r'D:\code\water_turbidity_det\video\20251230day\4video_20251229160514.mp4'
  9. output_rootpath = r'D:\code\water_turbidity_det\frame_data' # 输出路径的根目录
  10. # 抽帧间隔
  11. interval = 20
  12. # 我们将图像输出到根目录下的子目录中,子目录和视频名称相同
  13. img_base = os.path.basename(path).split('.')[0]
  14. imgs_output_path = os.path.join(output_rootpath, img_base) # 视频名称不要有.符号混淆后缀名
  15. # 清理上次抽帧结果
  16. if os.path.exists(imgs_output_path):
  17. shutil.rmtree(imgs_output_path)
  18. # 创建路径
  19. if not os.path.exists(imgs_output_path):
  20. os.makedirs(imgs_output_path)
  21. # 打开视频文件
  22. cap = cv2.VideoCapture(path)
  23. # 检查视频是否成功打开
  24. if not cap.isOpened():
  25. raise Exception('错误:无法打开视频文件。')
  26. frame_count = 0
  27. save_count = 0
  28. while True:
  29. ret, frame = cap.read()
  30. if not ret:
  31. break
  32. img_save_path = os.path.join(imgs_output_path,f"{frame_count:06d}.jpg")
  33. # 按照抽帧间隔保存图片
  34. if frame_count % interval == 0:
  35. cv2.imwrite(img_save_path, frame)
  36. save_count+=1
  37. frame_count += 1
  38. print(f"已处理{frame_count}帧, 保存至{img_save_path}")
  39. print(f"处理完成,共处理{frame_count}帧, 保存{save_count}帧")
  40. if __name__ == '__main__':
  41. main()