Ich versuche, ein Video aufzuzeichnen, mit der Python-Himbeer-Kameramodul und dann konvertieren jedes Bild zu einem OpenCV Rahmen ohne Erfolg konvertieren:Wie picamera Video-Frame zu OpenCV Objekt
import time
import picamera
import cv2
import numpy as np
class BroadcastOutput(object):
def __init__(self, camera):
return
def write(self, b):
#create numpy array from b
data = np.fromstring(b, dtype=np.uint8)
#doesn't work with reshape either
#data = np.fromstring(b, dtype=np.uint8).reshape(320, 280, 3)
#enconde as image
image = cv2.imdecode(data, 1)
#test if is valid cv2 object -> fails
cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
def flush(self):
print('Waiting for background conversion process to exit')
#camera setup and start
with picamera.PiCamera() as camera:
camera.resolution = (320, 280)
camera.framerate = 24
time.sleep(2) # camera warm-up time
print('Initializing broadcast thread')
output = BroadcastOutput(camera)
print('Starting recording')
camera.start_recording(output, 'bgr')
try:
while True:
camera.wait_recording(1)
except KeyboardInterrupt:
pass
finally:
print('Stopping recording')
camera.stop_recording()
Wenn ich drucken mein numpy array hat inhalt, das bildobjekt nach decode ist aber immer none.
Also meine Frage: Wie nutze ich die bereitgestellten Daten in b als cv2-Frame richtig? Ich bin noch neu in der Bildverarbeitung ... Danke für jede Hilfe im Voraus!
Was ist der Punkt, um 'Daten' und' Bild' von 'b' zu erhalten, wenn Sie sie dann ignorieren und' b' in 'cvtColor' verwenden? Eigentlich scheint der 'imdecode' ein wenig sinnlos zu sein, wenn man bedenkt, dass man die Daten in eine 3-Kanal-Matrix umformt. Dieses ganze Snippet sieht eher komisch aus ... –
du hast vollkommen recht ... langer tag;) ich habe versucht mein sniped zu verdeutlichen und ein komplettes und brauchbares beispiel zur verfügung gestellt –
Was ist die Länge von 'b' wenn' write' aufgerufen wird? Ich bin mir nicht sicher, dass es garantiert ist, dass man pro Frame "schreiben" kann. Die in der Bibliothek bereitgestellten Convenience Wrapper scheinen die Konvertierung in 'flush' durchzuführen. | Wenn Sie sich die ['bytes_to_rgb'-Funktion] (http://picamera.readthedocs.io/en/release-1.8/_modules/picamera/array.html) ansehen, scheint der' np.fromstring'-Ansatz in der rechten zu sein Richtung, vorausgesetzt, Sie haben den ganzen Rahmen zur Verfügung. –