Python_OpenCV_保存工业摄像头采集数据为视频文件

 参考:基于python opencv-python 的录制并保存USB摄像头视频(无声版)

主要用到:

fourcc = cv2.VideoWriter_fourcc(*'mp4v')
#设置视频格式, *'mp4v'\ *'flv1' \*'XVID' 分别对应 .mp4 .flv .avi

out = cv2.VideoWriter('output.mp4',fourcc, 60.0, (640,480))
#帧率, 大小
out.write(mat)#写入视频

out.release()#释放视频

 测试发现如果没经过release()直接关闭程序, 视频文件会出错


完整代码

from dvp import *
import numpy as np
import cv2

#将帧信息转换为numpy的矩阵对象,后续可以通过opencv的cvtColor转换为特定的图像格式
def frame2mat(frameBuffer):
    frame, buffer = frameBuffer

    bits = np.uint8 if(frame.bits == Bits.BITS_8) else np.uint16
    shape = None
    convertType = None
    if(frame.format >= ImageFormat.FORMAT_MONO and frame.format <= ImageFormat.FORMAT_BAYER_RG):
        shape = 1
    elif(frame.format == ImageFormat.FORMAT_BGR24 or frame.format == ImageFormat.FORMAT_RGB24):
        shape = 3
    elif(frame.format == ImageFormat.FORMAT_BGR32 or frame.format == ImageFormat.FORMAT_RGB32):
        shape = 4
    else:
        return None

    mat = np.frombuffer(buffer, bits)
    mat = mat.reshape(frame.iHeight, frame.iWidth, shape)   #转换维度
    return mat

#定义主函数
def main():
    cameraInfo = Refresh();                                 #刷新并获取相机列表
    if(len(cameraInfo) == 0):                               #没有任何设备则退出
        print(u"没有找到设备")
        return

    for k, v in enumerate(cameraInfo):                      #打印相机索引和名称
        print(k, "->", v.FriendlyName)
    
    while(True):                                            #循环直到打开一台相机
        str = input("请选定将要打开的相机索引号(0,1,2...):")
        index = (int)(str)                              #输入的索引号字符串转换为整数
        camera = Camera(index)                          #以索引号的方式打开相机
        print(camera);                                  #打印相机信息
        break
    
    camera.TriggerState = False                         #从触发模式切换到连续出图模式
    camera.Start()                                      #启动视频流

    fourcc = cv2.VideoWriter_fourcc(*'mp4v')#设置视频格式, *'mp4v'\ *'flv1' \*'XVID' 分别对应 .mp4 .flv .avi
    out = cv2.VideoWriter('output.mp4',fourcc, 60.0, (640,480))#帧率, 大小

    while (cv2.waitKey(1) != 27):                           #按ESC键则退出循环
        print(camera.FrameCount)                        #打印帧统计信息
        frame = camera.GetFrame(3000)                   #从相机采集图像数据,超时时间为3000毫秒
        mat = frame2mat(frame)                              #转换为标准数据格式
        cv2.imshow(u"Preview (Press ESC exit)", mat)        #显示图像数据

        out.write(mat)#写入视频

    out.release()#释放视频
    cv2.destroyAllWindows()                                 #销毁窗口
    camera.Stop()                                           #停止视频流
    camera.Close()                                          #关闭相机

#执行主函数
main()

效果测试 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值