У меня есть USB-камера, способная записывать 60 кадров в секунду. Я использую openCV с простым python кодом на Windows для захвата некоторых видео, но все идет не так гладко!
Моя главная проблема заключается в том, что, если я установлю свойства [width, height]
на максимум камера допускает, что она способна записывать 60 кадров в секунду, в противном случае (т.е. при любом более низком разрешении) запись / потоковая передача упадут до макс. 30 кадров в секунду (запись будет настолько забавной, что либо ускоряется, либо замедляется в соответствии с указанными кадрами в секунду; т. е. если задано разрешение 320X240 и частота кадров записи 60, а в течение 10 секунд результирующее видео будет сжато до 5 секунд, так что в основном оно увеличилось в 2 раза !!)
Я не понимаю, почему именно это происходит? есть идеи?
вот фрагмент кода:
import cv2
import os
import time
def readVideo(Did):
cap = cv2.VideoCapture(Did)
# cap.set(cv2.CAP_PROP_FPS, 60) # no matter if you specify or not it selects what suits!!
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320) # 640 is maximum
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240) # 480 is maximum
ret,frame = cap.read()
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('./output.avi', fourcc, 60.0, (320,240)) # (width,height) must match what is stated above in CAP!
while ret:
ret,frame = cap.read()
elapsed = time.time() - start
count = count + 1 # frame numbers
cv2.putText(frame,str(cfpsBacked), (25,15),font,fontScale,fontColor,lineType)
out.write(frame)
cv2.imshow('camera',frame)
if elapsed - tick >= 1:
print("Actual count:{}",count)
tick += 1
cfpsBacked = count
count = 0
if tick - 10 == 0: # just records 10 seconds
break
if cv2.waitKey(10) & 0xFF == ord('q'):
break
out.release()
cap.release()
cv2.destroyAllWindows() # destroy all the opened windows