前几次使用Python+Opencv,对网络摄像头,USB摄像头进行 数据采集 ,基本流程已经跑通,没什么大问题。最近项目中使用了一款120fps/s的USB摄像头,但是调试好代码运行后,问题来了。
120fps,每次只能读取30多张图片或者最多也在40张以下。根本达不到要求。
# -*- coding: cp936 -*- Author:NoamaNelson Date:2019-11-19 Discription:Read Camaro picture and save import cv2,os,time import numpy as np class CamaroCap(object): """ 打开视频流 """ def __init__(self): self.cap = cv2.VideoCapture(0) """ 图片信息打印 """ 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(True): ret,frame = self.cap.read() #ret:True或者False,代表有没有读取到图片;frame:表示截取到一帧的图片 if ret == False: break self.get_image_info(frame) # print("打印图片信息") 注意:调试的时候可以打开,如果是一直运行程序,建议把这行代码注释掉,避免影响内存占用 cv2.imshow('capture',frame) # 展示图片 cv2.imwrite(r"D:\image\\"+ str(i) + ".jpg",frame) # 保存图片 i = i + 1 if cv2.waitKey(1) & 0xFF == ord('q'): # break if __name__ == '__main__': outmasages = CamaroCap() outmasages.Camaro_image() # 调用摄像头 outmasages.cap.release() # 释放对象和销毁窗口 cv2.destroyAllWindows()
self.cap.set(cv2.CAP_PROP_FPS, 60)
CAP_PROP_FRAME_WIDTH 和 CAP_PROP_FRAME_HEIGHT进行设置宽和高
CV_CAP_PROP_FOURCC
#self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 800) #self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 600) #self.cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))
# -*- coding: cp936 -*- Author:zhangbo Date:2019-11-07 Discription:Read Camaro picture and save import cv2,os,time,datetime import numpy as np class CamaroCap(object): """ 打开视频流 """ def __init__(self): self.cap = cv2.VideoCapture(0) #self.cap.set(cv2.CAP_PROP_FPS, 120) 这个有时候生效,有时候不生效不知道是什么原因 self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 800) self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 600) self.cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')) """ 图片信息打印 """ 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(True): ret,frame = self.cap.read() #ret:True或者False,代表有没有读取到图片;frame:表示截取到一帧的图片 if ret == False: break #self.get_image_info(frame) # print("打印图片信息") 注意:调试的时候可以打开,如果是一直运行程序,建议把这行代码注释掉,避免影响内存占用 cv2.imshow('capture',frame) # 展示图片 mtime = datetime.datetime.now().strftime('%Y-%m-%d_%H_%M_%S') print(mtime) cv2.imwrite(r"D:\image\\" + str(i) + str("-") + mtime + ".jpg",frame) # 保存图片 i = i + 1 if cv2.waitKey(1) & 0xFF == ord('q'): break if __name__ == '__main__': outmasages = CamaroCap()