2017-01-09 4 views
0

Ich versuche derzeit, Frames von einem Video (mit openCV2) zu nehmen und dann in einer App mit Kivy anzuzeigen.Konvertieren von OpenCV2-Bild in Kivy Texture

Aufgrund der unterschiedlichen Bildformate musste ich das Bild von openCV2 auf Platte speichern und dann in Kivy lesen, was eine unelegante Lösung ist und gelegentlich Abstürze verursacht (wo die Kivy-Sektion versucht, auf die Bild, bevor es vollständig gespeichert ist)

Ich versuche, das Bild direkt zu übergeben, ohne Disc-Zugriff beteiligt. mit Texture.blit_buffer

im Moment noch, ich bin versucht, das Bild von openCV2 in einen Puffer mit cv2.imencode zu speichern und dann den Puffer in eine Kivy Textur Umwandlung sieht das Bild Extraktion wie:

video = cv2.VideoCapture(videourl) 
success, image = video.read() 
success2, buffer = cv2.imencode('.jpg', image) 

während die Textur Schöpfung wie folgt aussieht:

tex = Texture.create() 
tex.blit_buffer(buffer, colorfmt='rgb', bufferfmt='ubyte') 

jedoch habe ich den folgenden Fehler wurde immer:

ValueError: Buffer has wrong number of dimensions (expected 1, got 2) 

davon vermute ich, dass es erwartet, dass das Array 1 dimensional sein wird. muss ich nur das openCV2-Bild (das als ein numpiges n-dimensionales Array gespeichert ist) in ein eindimensionales Array konvertieren? und wenn ja, was müsste ich noch tun, um sicherzustellen, dass das Bild korrekt kopiert wird?

Vielen Dank im Voraus,

Antwort

0

Ihre Puffer flach durch

buffer.flatten() 

und es sollte funktionieren.

+0

ah, das hat es getan, danke. –