Problem: Wenn Sie cv2.VideoCapture () verwenden, müssen Sie die Kameraausgabeeinstellungen manuell eingeben.
Beispiel
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() #Es funktioniert oder nicht
Abhängig von den Ausgabeeinstellungen kann die Auflösung oder die FPS mit dem nächstgelegenen Wert automatisch eingestellt werden, oder cap.read () kann einen Fehler auslösen. Ich konnte über opencv nicht auf die entsprechenden Konfigurationsinformationen der USB-Kamera zugreifen, daher erhalte ich sie über den Befehl v412-ctl.
Befehl zum Ausgeben einer 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
Ergebnis
{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'},
Nachdem die entsprechenden Einstellungen als Wörterbuchtyp erfasst wurden, ist es möglich geworden, Kamerainformationen als Variablen innerhalb des Programms zu verwenden.
Recommended Posts