Aktuell bastle ich an einem dual Monitor Script auf pyglet Basis. Zur Manipulation eines Streams (Webcam etc) verwende ich OpenCV. Im Prinzip habe ich das alles schon recht weit entwickelt, allerdings in pygame und dort funktioniert auch alles soweit. Nur lockt mich doch die Möglichkeit ein zweites Fenster auf einem 2. Monitor zu haben und deshalb der umstieg auf pyglet.
Im Grunde geht es mir nur darum ein Bild von OpenCV (numpy array) nach pyglet zu bekommen. Leider gelingt mir das nicht und ich komme auch ohne Hilfe alleine nicht weiter. Kann mir jemand von euch bitte weiterhelfen und nachstehenden Code prüfen/ändern?
Hier mein Testscript:
Code: Alles auswählen
#!/usr/bin/env python
import numpy as np
import cv2
import pyglet
from pyglet.window import Window
from pyglet.window import key
from pyglet import image
platform = pyglet.window.get_platform()
display = platform.get_default_display()
screens = display.get_screens()
#window0 = pyglet.window.Window(fullscreen=True, screen=screens[0])
#window1 = pyglet.window.Window(fullscreen=True, screen=screens[1])
window0 = pyglet.window.Window(1280,800)
window1 = pyglet.window.Window()
label0 = pyglet.text.Label('Display: 0',
font_name='Times New Roman',
font_size=45,
x=window0.width//2, y=window0.height//2,
anchor_x='center', anchor_y='center')
label1 = pyglet.text.Label('Display: 1',
font_name='Times New Roman',
font_size=45,
x=window1.width//2, y=window1.height//2,
anchor_x='center', anchor_y='center')
def main():
cap = cv2.VideoCapture(0)
cap.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 800)
cap.set(cv2.cv.CV_CAP_PROP_FPS, 24)
running = True
while running:
ret, frame = cap.read()
#img = image.load(frame, file=fileobj)
#img = pyglet.resource.image(frame)
#img = image.load(frame)
img = pyglet.image.ImageData(1280, 800, 'RGB', frame.tostring(), pitch=None)
@window0.event
def on_key_press(symbol, modifiers):
if symbol == key._1:
print 'test...'
@window0.event
def on_draw():
window0.clear()
img.blit(0,0,1280,800)
label0.draw()
@window1.event
def on_draw():
window1.clear()
label1.draw()
if __name__ == '__main__':
main()
pyglet.app.run()