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