OpenCV - rahmenloses Fenster

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
TommiB
User
Beiträge: 41
Registriert: Montag 9. Februar 2015, 18:15

Hallo,

ich experimentiere gerade mit OpenCV 3.0.0 unter Windows7 rum.
Ich möchte eine Kamera in einem Fenster darstellen, was auch funktioniert.

Kann man dabei das Fenster rahmenlos darstellen?

Gruß TommiB
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

openCV ist zur Bildverarbeitung gedacht, die Bild / Video anzeige ist nur sehr rudimentär.

Du kannst aber openCVs Daten in jedem anderen GUI Toolkit verwenden und das dort lösen.

Mit wxPython habe ich sogar schon mal ein Rahmenloses Fenster gemacht mit anderen (Qt) geht das auch.
TommiB
User
Beiträge: 41
Registriert: Montag 9. Februar 2015, 18:15

Hallo Sr4l,

danke für die Antwort....
Ich bin mit der objektorientierten Programmierung (Klassen etc.) nicht so bewandert... :-(

Ich hatte mir den Beitrag : http://www.python-forum.de/viewtopic.php?f=9&t=28179 von Kaytec angesehen....
Jedoch wird dort das opencv Version 2... mit highgui (gibt es wohl in der 3.Version nicht mehr?) und Pil benutzt...

Aktuell ist 3.0.0 bei mir installiert.. Hatte gestern ein wenig rum experimentiert... Leider nur mit mäßigem Erfolg...

Ich würde gerne das Fenster rahmenlos und in der Größe anpassbar darstellen können.
Eine weiter Verarbeitung von den Bild /Bildern (ich möchte 4 Webcams bzw. Videograbber gleichzeitig darstellen - ähnlich wie eine Sicherheits-Überwachungssoftware) ist nicht notwendig.

Vielleicht hast Du, oder jemand hier im Forum, einen Hinweis, wie man das Script vom Kaytec auf die neue opencv umbauen kann?

Gruß Tommi
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Um genau zu sein wird dort Tkinter als GUI benutzt. Dann noch openCV um die Daten von der Webcam zu bekommen. Und dann noch PIL für die Umwandlung der Bilddatei.

Der Code ist schon recht alt. Ich könnte mir vorstellen das man bereits mit opencv2 auf den PIL Part verzichten konnte, aber das ist jetzt nur so ein Gefühl, das müsste ich mir genauer anschauen.

Mit openCV3 habe ich mich noch nicht beschäftigt, weil es gerade erst released wurde und ich zur Zeit an Dingen arbeite wo ich es nicht brauche. Vielleicht hilft dir da die Doku:

http://docs.opencv.org/3.0.0/dd/d43/tut ... splay.html
TommiB
User
Beiträge: 41
Registriert: Montag 9. Februar 2015, 18:15

Hallo Sr4l,

danke für den Hinweis. Die Doku habe ich bereits durchgearbeitet. So läuft das.

Ich muss mich ein wenig mehr damit befassen, damit ich den richtigen Durchblick bekomme.

Gruß Tommi
TommiB
User
Beiträge: 41
Registriert: Montag 9. Februar 2015, 18:15

Hallo,

nachdem ich viel im Netz gesucht habe, habe ich folgendes Script hier zum Laufen bekommen:

Code: Alles auswählen

import Tkinter as tk
import cv2
from PIL import Image, ImageTk

width, height = 400, 300
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)

root = tk.Tk()
root.bind('<Escape>', lambda e: root.quit())
lmain = tk.Label(root)
lmain.pack()

def show_frame():
    frame = cap.read()[1]
    frame = cv2.flip(frame, 1)
    cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
    img = Image.fromarray(cv2image)
    imgtk = ImageTk.PhotoImage(image=img)
    lmain.imgtk = imgtk
    lmain.configure(image=imgtk)
    lmain.after(2, show_frame)

show_frame()
root.mainloop()
Jedoch startet das Programm nicht immer richtig....

Nun möchte ich von zwei Kameras (cv2.VideoCapture(0)+ cv2.VideoCapture(1)) nebeneinander zeigen.
Besser noch, gleich 4 Kameras anzeigen - zwei oben und zwei darunter).

Hat da jemand eine Idee, wie ich das anstellen muss?

Gruß TommiB
TommiB
User
Beiträge: 41
Registriert: Montag 9. Februar 2015, 18:15

Hallo Python-Forum,

hat hier Niemand eine Idee?

Gruß Tommi
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Variante 1:
Du lernst wie man mehrer Bilder in Tkinter einbaut.
Am Rande: Ganz wenige nutzen hier Tk und ich vermute das die Zahl derer die öfters mit GUI Toolkits arbeitet auch überschaubar ist.
In meinem Fall kann ich die Tage an denen ich mich mit GUI Toolkits beschäftigt habe sicherlich noch an zwei Händen abzählen.

Variante 2:
Erstell ein Neues Bild mit PIL welches 2*höhe, und 2*breite eines Webcambildes hat und füge die 4 Webcambilder in dein neues Bild mit paste Funktion ein.

Alle Code den du dazu benötigst findest du hier in der ersten Antwort: https://stackoverflow.com/questions/256 ... -in-python
TommiB
User
Beiträge: 41
Registriert: Montag 9. Februar 2015, 18:15

Hallo Sr4l,

danke, daß Du Dich nochmal gemeldet hast.
Ich habe intensiv geforscht und habe es nun hin bekommen, das gegrabbte Bild in einem pygame.surface darzustellen.
Da kann ich auch im surface die Lage jedes Bildes angeben, bevor es dargestellt wird.

Die ersten Versuche waren sehr gut.....

Zur Zeit habe ich nur mit 2 Quelle (Web-Cam und einem Grabberstick) gearbeitet. Mal gucken, ob es auch mit mehr Quellen klappt.
Ggf. muss ich auf USB3 Grabber ausweichen...

Gruß Tommi
Antworten