Je veux réduire le nombre d'images acquises par seconde dans une webcam, c'est le code que j'utilise
#!/usr/bin/env python
import cv2
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FPS, 10)
fps = int(cap.get(5))
print("fps:", fps)
while(cap.isOpened()):
ret,frame = cap.read()
if not ret:
break
cv2.imshow('frame', frame)
k = cv2.waitKey(1)
if k == 27:
break
Mais cela ne prend pas effet, j'ai toujours 30 fps par défaut au lieu de 10 configurés par cap.set(cv2.CAP_PROP_FPS, 10)
. Je veux réduire la fréquence d'images, car j'ai un détecteur manuel qui prend pas mal de temps à traiter chaque image. Je ne peux pas stocker d'images dans la mémoire tampon, car cela détecterait la main dans les positions précédentes. Je pouvais faire fonctionner le détecteur avec une minuterie ou autre chose, mais je pensais que changer les images en seconde était un moyen plus facile, mais cela ne fonctionnait pas et je ne sais pas pourquoi.
J'utilise Opencv 3.4.2 avec Python 3.6.3 dans Windows 8.1
Je ne pouvais pas définir le nombre d'images par seconde pour mon appareil photo, donc je suis parvenu à limiter ce nombre d'images par seconde en fonction du temps, de sorte qu'une seule image par seconde soit intégrée au reste de mon code. Ce n'est pas exact, mais je n'ai pas besoin d'exact, juste d'un limiteur au lieu de 30fps. HTH
import time
fpsLimit = 1 # throttle limit
startTime = time.time()
cv = cv2.VideoCapture(0)
While True:
frame = cv.read
nowTime = time.time()
if (int(nowTime - startTime)) > fpsLimit:
# do other cv2 stuff....
startTime = time.time() # reset time