• 机器视觉学习(三)—— 保存视频流


    目录

    一、获取视频

    二、知识拓展

    三、典型代码举例


    一、获取视频

    要使用OpenCV保存视频,可以按照以下步骤进行操作:

    1. """
    2.     OpenCV打开摄像头
    3.     设置摄像头参数
    4.     录制视频
    5. """

    1.  导入必要的库:

    import cv2
    

    2.  创建一个VideoWriter对象:

    1. #定义保存视频的文件名、编解码器、帧率和分辨率
    2. filename = 'output.avi'
    3. codec = cv2.VideoWriter_fourcc(*'XVID')
    4. fps = 30.0
    5. frame_size = (640, 480)
    6. #创建VideoWriter对象
    7. video_writer = cv2.VideoWriter(filename, codec, fps, frame_size)

    3.  从摄像头或者视频文件中读取帧:

    1. #打开摄像头或者视频文件
    2. cap = cv2.VideoCapture(0) #传入0表示打开默认摄像头
    3. #cap = cv2.VideoCapture('input.avi') #传入视频文件名
    4. while True:
    5. #读取一帧
    6. ret, frame = cap.read()
    7. #显示帧
    8. cv2.imshow('Video', frame)
    9. #保存帧到视频文件
    10. video_writer.write(frame)
    11. #按下q键退出循环
    12. if cv2.waitKey(1) & 0xFF == ord('q'):
    13. break
    14. #释放资源
    15. cap.release()
    16. video_writer.release()
    17. cv2.destroyAllWindows()
    18. """
    19. cv2.VideoCapture()        函数从摄像头或者视频文件中读取帧
    20. cv2.imshow()         函数显示
    21. video_writer.write()        函数将帧写入视频文件
    22. cap.release()         释放摄像头或者视频文件资源
    23. video_writer.release()      释放视频文件资源
    24. cv2.destroyAllWindows()     关闭所有窗口
    25. """

    二、知识拓展

    个人笔记(仅供参考)

    1. """
    2. 图像显示:
    3. cv2.imshow(winname,img)
    4. winname: 窗口名称
    5. img: 显示的图像
    6. 图层(通道)分离:
    7. cv2.split(img)
    8. img: 要分离的图像
    9. 图层(通道)合并:
    10. cv2.merge(img)
    11. img: 要合并的色彩通道
    12. 视频流读取:
    13. cv2.VideoCapture(filename)
    14. filename: 打开的摄像头设备或者打开的视频路径
    15. cv2.VideoCapture(0)
    16. 0: 读取摄像头, 0为摄像头索引,当有多个摄像头时,从 0开始编号
    17. 视频流参数读改:
    18. cap(变量名).get(propId) 获得视频的一些参数信息
    19. propId: 可以是 0到 18之间的任何整数,即下表代码
    20. cap(变量名).get(3),cap.get(4) 查看每一帧的宽和高,默认得到的值是 640x480
    21. cap(变量名).set(propId,value) 修改参数
    22. value: 想要设置成的新值
    23. cap(变量名).set(3,320),cap.set(4,240) 来把宽和高改成 320x240
    24. propId 可以以数字代替,按顺序从0开始
    25. 代码 代替数字 代码 代替数字
    26. CV_CAP_PROP_POS_MSEC 0 CV_CAP_PROP_BRIGHTNESS 10
    27. CV_CAP_PROP_POS_FRAMES 1 CV_CAP_PROP_CONTRAST 11
    28. CV_CAP_PROP_POS_AVI_RATIO 2 CV_CAP_PROP_SATURATION 12
    29. CV_CAP_PROP_FRAME_WIDTH 3 CV_CAP_PROP_HUE 13
    30. CV_CAP_PROP_FRAME_HEIGHT 4 CV_CAP_PROP_GAIN 14
    31. CV_CAP_PROP_FPS 5 CV_CAP_PROP_EXPOSURE 15
    32. CV_CAP_PROP_FOURCC 6 CV_CAP_PROP_CONVERT_RGB 16
    33. CV_CAP_PROP_FRAME_COUNT 7 CV_CAP_PROP_WHITE_BALANCE 17
    34. CV_CAP_PROP_FORMAT 8 CV_CAP_PROP_RECTIFICATION 18
    35. CV_CAP_PROP_MODE 9
    36. 视频流保存:
    37. VideoWriter(filename,fourcc,fps,frameSize)
    38. filename: 打开的摄像头设备或者打开的视频路径
    39. fourcc:
    40. 指定编码器 (编码器是将数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备)
    41. fps: 要保存的视频的帧率
    42. frameSize: 要保存的文件的画面尺寸
    43. 视频流接收:
    44. ret,frame = cam(变量名).read()
    45. cam(变量名).read() 返回一个布尔值
    46. ret 接收布尔值,如果为 True,则说明每一帧图像都被正常读取
    47. frame 用于接收得到的每一帧图片
    48. 视频流编码设置:
    49. cv.VideoWriter_fourcc()
    50. 常用编码格式有以下几种:
    51. Fourcc 视频文件后缀
    52. cv2.VideoWriter_fourcc('M', 'P', '4', 'V') .mp4
    53. cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') .avi
    54. cv2.VideoWriter_fourcc('I', '4', '2', '0') .avi
    55. cv2.VideoWriter_fourcc('P', 'I', 'M', 'I') .avi
    56. cv2.VideoWriter_fourcc('T', 'H', 'E', 'O') .ogv
    57. cv2.VideoWriter_fourcc('F', 'L', 'V', '1') .flv
    58. """

    三、典型代码举例

    通过摄像头拍摄视频并保存到相应路径:

    1. import cv2 as cv
    2. cap = cv.VideoCapture(0) # 读取摄像头
    3. cap.set(cv.CAP_PROP_EXPOSURE,0) # 视频流参数读改 或者 cap.set(15,0)
    4. # cap.set(3,4080),cap.set(4,3060) # 把窗口宽和高改成 4080x3060
    5. fourcc = cv.VideoWriter_fourcc(*"MJPG")
    6. xin = cv.VideoWriter("xin_1.avi",fourcc,80,(640,480)) # 视频流保存
    7. while(cap.isOpened()): # 用于判断 cap是否正常初始化,返回布尔值,正常则返回 True
    8. ret,frame = cap.read()
    9. xin.write(frame)
    10. cv.imshow("CAP",frame)
    11. if cv.waitKey(1) == 27: # 等候 1ms,播放下一帧
    12. break
    13. cap.release()
    14. xin.release()
    15. cv.destroyAllWindows()

  • 相关阅读:
    CSDN博客编写的相关操作
    LTH7五脚芯片的完整方案图FS4054充电电路原理
    makedown语法及相关语法格式
    Linux RPM 构建
    【SpringCloud-学习笔记】http客户端Feign
    【密评】商用密码应用安全性评估从业人员考核题库(十一)
    PX4模块设计之三十七:MulticopterRateControl模块
    pgbouncer 使用
    【鸿蒙手机】获取UDID,并添加签名认证
    【原创】在Linux上安装Zabbix客户端
  • 原文地址:https://blog.csdn.net/qq_74375828/article/details/136715701