明天测试的时候,遇到了一个问题,测试需要是,须要把摄像头拍摄的实时视频逐帧率保留下来。
通过查阅材料以及网友帮忙,目前曾经实现。记录下来心愿能够帮忙有须要的敌人。
1、思路
应用Python+Opencv,从摄像头的实时视频流中逐帧读取图片,保留到本地
2、工具
- 装置Python
- 装置Opencv
3、分类
目前测试的过程中遇到了三种类型的摄像头数据读取,别离是:
- USB一般摄像机:
间接应用Python+Opencv,进行数据采集
self.cap = cv2.VideoCapture(0);0是本地摄像头
- USB工业摄像头:
应用厂家自带的SDK进行二次开发,例如某厂家的SDK如下:
- 网络摄像头:
从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()