Я несколько раз использовал Python+Opencv для сбора данных с веб-камер и USB-камер. Основной процесс был пройден, и серьезных проблем не возникло. В недавнем проекте использовалась USB-камера со скоростью 120 кадров в секунду, но после отладки и запуска кода возникла проблема.
120 кадров в секунду, можно читать только более 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()
outmasages.Camaro_image() # позвонить на камеру
outmasages.cap.release() # Освободите объекты и уничтожьте окна
cv2.destroyAllWindows()