web-dev-qa-db-fra.com

changer le taux de trame dans l'openv 3.4.2

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

3
Mr. C

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
1
Jeff Blumenthal