Seite 1 von 1
tkinter und opencv
Verfasst: Freitag 23. Dezember 2011, 13:37
von kaytec
Hallo !
habe mal mit Tkinter und opencv gespielt und versucht meine webcam in Tkinter einzubetten.
Code: Alles auswählen
import Tkinter as tk
import opencv
from opencv import highgui
from PIL import ImageTk
TITLE = "Capture Cam"
UPDATE_TIME = 40
class Cam(tk.Label):
def __init__(self, root):
tk.Label.__init__(self, root)
self.root = root
self.camera = highgui.cvCreateCameraCapture(0)
def run(self):
self.img = ImageTk.PhotoImage(opencv.adaptors.Ipl2PIL(
highgui.cvQueryFrame(self.camera)))
self.config(image = self.img)
self.root.after(UPDATE_TIME, self.run)
if __name__ == '__main__':
root = tk.Tk()
cam = Cam(root)
cam.pack()
cam.run()
root.title(TITLE)
root.mainloop()
Gruß Frank
Re: tkinter und opencv
Verfasst: Freitag 23. Dezember 2011, 14:45
von snafu
Öhm, kommt da noch ne Frage oder war das eine Art Proof of Concept? Deine Wortwahl ("versucht") klingt ein bißchen so, als hätte das nicht richtig geklappt...
Re: tkinter und opencv
Verfasst: Freitag 23. Dezember 2011, 14:55
von kaytec
Hallo snafu !
Ne, klappt gut - nur könnte es ja sein, dass es nicht stabil ist.
Gruß Frank
Re: tkinter und opencv
Verfasst: Montag 26. Dezember 2011, 11:13
von kaytec
Hallo !
mit verkleinertem Fenster:
Code: Alles auswählen
import Tkinter as tk
import opencv
from opencv import highgui
from PIL import ImageTk
TITLE = "Capture Cam"
UPDATE_TIME = 30
WIDTH = 320
HEIGHT = 240
class Cam(tk.Label):
def __init__(self, root, width, height):
tk.Label.__init__(self, root)
self.width = width
self.height = height
self.root = root
self.camera = highgui.cvCreateCameraCapture(0)
def run(self):
self.img = ImageTk.PhotoImage(image = opencv.adaptors.Ipl2PIL(
highgui.cvQueryFrame(self.camera)).resize((self.width,
self.height)))
self.config(image = self.img)
self.root.after(UPDATE_TIME, self.run)
if __name__ == '__main__':
root = tk.Tk()
cam = Cam(root, WIDTH, HEIGHT)
cam.pack()
cam.run()
root.title(TITLE)
root.mainloop()
Gruß Frank
Re: tkinter und opencv
Verfasst: Montag 26. Dezember 2011, 23:09
von kaytec
Hallo !
Mit der Möglichkeit Bilder aufzunehmen:
Code: Alles auswählen
import Tkinter as tk
import opencv
from opencv import highgui
from PIL import ImageTk
import time
TITLE = "Capture Cam"
UPDATE_TIME = 30
WIDTH = 320
HEIGHT = 240
TIME_FORMAT = "%m\%d\%Y_%H:%M:%S"
IMAGE_EXT = ".jpeg"
SAVE_IMAGE_TEXT = "cam_"
class Cam(tk.Label):
def __init__(self, root, width, height):
tk.Label.__init__(self, root)
self.width = width
self.height = height
self.root = root
self.camera = highgui.cvCreateCameraCapture(0)
def run(self):
self.current_image = opencv.adaptors.Ipl2PIL(highgui.cvQueryFrame(
self.camera)).resize((self.width, self.height))
self.tk_image = ImageTk.PhotoImage(self.current_image)
self.config(image = self.tk_image)
self.root.after(UPDATE_TIME, self.run)
def save_image(self):
self.current_image.save("%s%s%s" %(SAVE_IMAGE_TEXT, time.strftime(
TIME_FORMAT), IMAGE_EXT))
if __name__ == '__main__':
root = tk.Tk()
cam = Cam(root, WIDTH, HEIGHT)
cam.pack()
cam.run()
tk.Button(root, text = "Save Image", command = cam.save_image).pack()
root.title(TITLE)
root.mainloop()
Gruß Frank
Re: tkinter und opencv
Verfasst: Mittwoch 15. August 2012, 18:25
von kaytec
Hallo
Die aufgenommenen Fotos werden zu einem Film zusammengesetzt.
Code: Alles auswählen
import Tkinter as tk
from PIL import Image, ImageTk
import cv
UPDATE_TIME = 10
WIDTH = 600
HEIGHT = 480
RGB = "RGB"
BGR = "BGR"
MODUS = "raw"
MOVIE_NAME = "output.avi"
BUTTON_TEXT = "OK"
BUTTON_WIDTH = 10
FPS = 30
CAM = 1
class Cam(tk.Label):
def __init__(self, root, width, height, cam, movie_file):
tk.Label.__init__(self, root)
self.width = width
self.height = height
self.root = root
self.writer = cv.CreateVideoWriter(filename = movie_file, fourcc=
cv.CV_FOURCC("D","I","V","X"), fps=FPS, frame_size=(width ,
height))
self.camera = cv.CaptureFromCAM(cam)
def run(self):
self.ipl_image = cv.QueryFrame(self.camera)
self.tk_image = ImageTk.PhotoImage(image = self.resize_image(
Image.fromstring(RGB, (self.ipl_image.width,
self.ipl_image.height), self.ipl_image.tostring(), MODUS, BGR )))
self.config(image = self.tk_image)
self.root.after(UPDATE_TIME, self.run)
def write_frame(self):
cv.WriteFrame(self.writer, self.ipl_image)
def resize_image(self, img):
img_width, img_height = img.size
if self.height >= self.width:
div_faktor = (float(str(int(img_width)))
/ float(str(self.width)))
img_width = img_width / div_faktor
img_height = img_height / div_faktor
else:
div_faktor = (float(str(int(img_height)))
/ float(str(self.height)))
img_width = img_width / div_faktor
img_height = img_height / div_faktor
return img.resize((int(img_width), int(img_height)))
if __name__ == '__main__':
root = tk.Tk()
cam = Cam(root, WIDTH, HEIGHT, CAM, MOVIE_NAME)
cam.pack()
def write_image():
cam.write_frame()
tk.Button(root, text = BUTTON_TEXT, width = BUTTON_WIDTH,
command = write_image).pack()
cam.run()
root.mainloop()
Gruß Frank