明天测试的时候,遇到了一个问题,测试需要是,须要把摄像头拍摄的实时视频逐帧率保留下来。
通过查阅材料以及网友帮忙,目前曾经实现。记录下来心愿能够帮忙有须要的敌人。

1、思路

应用Python+Opencv,从摄像头的实时视频流中逐帧读取图片,保留到本地

2、工具

  1. 装置Python
  2. 装置Opencv

3、分类

目前测试的过程中遇到了三种类型的摄像头数据读取,别离是:

  1. USB一般摄像机:
间接应用Python+Opencv,进行数据采集
self.cap = cv2.VideoCapture(0);0是本地摄像头
  1. USB工业摄像头:
应用厂家自带的SDK进行二次开发,例如某厂家的SDK如下:
  1. 网络摄像头:
从RTSP流中读取数据,读取办法,以大华一般网络摄像头为例:

4、示例

# -*- coding: cp936 -*-"""Author:xxxxxxDate:2019-09-23Discription:Read Camaro picture and save """import cv2,os,timeimport numpy as npfrom multiprocessing import Processimport threadclass CamaroCap(object):    #关上摄像头    def __init__(self):        #self.cap = cv2.VideoCapture(0)        self.cap = cv2.VideoCapture("rtsp://admin:admin123@172.16.9.23/cam/realmonitor?channel=1&subtype=0")#获取网络摄像机        """        self.cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))        self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)        self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480);        """    #图片信息打印           def get_image_info(self,image):        print(type(image))        print(image.shape)        print(image.size)        print(image.dtype)        pixel_data = np.array(image)        print(pixel_data)    #逐帧读取数据并保留图片到本地制订地位    def Camaro_image(self):        i = 0        while(1):            """            ret:True或者False,代表有没有读取到图片            frame:示意截取到一帧的图片            """            ret,frame = self.cap.read()            ret,frame = self.cap.read()            #print("打印图片信息")            #self.get_image_info(frame)                        # 展现图片            cv2.imshow('capture',frame)            #保留图片            cv2.imwrite(r"D:\image\\"+ str(i) + ".jpg",frame)            i = i + 1            if cv2.waitKey(1) & 0xFF == ord('q'):                breakif __name__ == '__main__':    outmasages = CamaroCap()    #调用摄像头    outmasages.Camaro_image()    #开释对象和销毁窗口    outmasages.cap.release()    cv2.destroyAllWindows()