Problème: lorsque vous utilisez cv2.VideoCapture (), vous devez entrer manuellement les paramètres de sortie de la caméra.
Exemple
WIDTH = 100
HEIGHT = 100
FPS = 10
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, WIDTH)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, HEIGHT)
cap.set(cv2.CAP_PROP_FPS, FPS)
ret, frame = cap.read() #Ça marche ou ça ne marche pas
Selon les paramètres de sortie, la résolution ou FPS avec la valeur la plus proche peut être définie automatiquement, ou cap.read () peut générer une erreur. Je n'ai pas pu accéder aux informations de configuration correspondantes de la caméra USB à partir d'opencv, donc je les récupère à partir de la commande v412-ctl.
Commande pour afficher une liste
import subprocess
import re
cmd = 'v4l2-ctl --device /dev/video0 --list-formats-ext'
proc = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
outs_bytes = proc.communicate()[0]
outs_str = outs_bytes.decode('utf-8')
outs_str_lists = outs_str.split('\n')
d = {}
i = 0
for line in outs_str_lists:
if "Pixel Format" in line:
pixelformat = line.split(":")[-1].strip()
if "Size:" in line:
resolution = line.split()[-1]
if "Interval" in line:
fps = re.findall("(?<=\().+?(?=\))",line)[0].split()[0]
_d = {"format":pixelformat,"height":resolution.split("x")[1],"width":resolution.split("x")[0],"fps":fps}
d[i] = _d
i +=1
print d
résultat
{0: {'format': "'MJPG' (compressed)",
'height': '2880',
'width': '3840',
'fps': '15.000'},
1: {'format': "'MJPG' (compressed)",
'height': '2880',
'width': '3840',
'fps': '10.000'},
2: {'format': "'MJPG' (compressed)",
'height': '2880',
'width': '3840',
'fps': '5.000'},
Maintenant que les paramètres correspondants ont été acquis en tant que type de dictionnaire, il est devenu possible d'utiliser les informations de la caméra en tant que variables à l'intérieur du programme.