# Created by Leo from: C:\Python23\Tom\leo\cameratest.leo # << Cameratest declarations >> import Image import ImageChops import image_view import ImageStat import ImageEnhance import ArgImagePlugin,BmpImagePlugin,BufrStubImagePlugin,CurImagePlugin,DcxImagePlugin,EpsImagePlugin,FitsStubImagePlugin,FliImagePlugin,FpxImagePlugin,GbrImagePlugin,GifImagePlugin,GribStubImagePlugin,Hdf5StubImagePlugin,IcoImagePlugin,ImImagePlugin,ImtImagePlugin,IptcImagePlugin,JpegImagePlugin,McIdasImagePlugin,MicImagePlugin,MpegImagePlugin,MspImagePlugin,PalmImagePlugin,PcdImagePlugin,PcxImagePlugin,PdfImagePlugin,PixarImagePlugin,PngImagePlugin,PpmImagePlugin,PsdImagePlugin,SgiImagePlugin,SunImagePlugin,TgaImagePlugin,TiffImagePlugin,WmfImagePlugin,XbmImagePlugin,XpmImagePlugin,XVThumbImagePlugin import wx from VideoCapture import Device import time, string # -- end -- << Cameratest declarations >> # << Cameratest methods >> (1 of 2) class MyFrame(wx.Frame): # << class MyFrame methods >> (1 of 8) def __init__(self, parent, id, title): wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.DefaultSize) self.imagesavedir = 'C:\\Python23\\tom\\imgtest\\' self.diffsavedir = 'C:\\Python23\\tom\\imgtest\\diff\\dif' tb = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, wx.TB_HORIZONTAL| wx.NO_BORDER| wx.TB_FLAT)#tb = self.CreateToolBar( wx.TB_HORIZONTAL| wx.NO_BORDER| wx.TB_FLAT ) # Here's a 'simple' toolbar example, and how to bind it using SetToolBar() #tb = wx.ToolBarSimple(self, -1, wx.DefaultPosition, wx.DefaultSize, # wx.TB_HORIZONTAL | wx.NO_BORDER | wx.TB_FLAT) #self.SetToolBar(tb) # But we're doing it a different way here. zoom_tool_mode = 'RGB' zoom_tool_size = (16, 16) zoom_tool_data = '\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\x00\xcb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe' zoom_tool_img = Image.fromstring(zoom_tool_mode, zoom_tool_size, zoom_tool_data) bmp = image_view.PILToWX(zoom_tool_img) img = wx.BitmapFromImage(bmp) cbID = wx.NewId() tb.AddControl( wx.Slider(tb,cbID, 100, 1, 500,wx.DefaultPosition, wx.DefaultSize, wx.SL_HORIZONTAL | wx.SL_AUTOTICKS | wx.SL_LABELS)) self.Bind(wx.EVT_SCROLL, self.OnCombo, id=cbID) self.SetToolBar(tb) tb.Realize() self.cyclenum = 100 self.cam = Device(devnum=0,showVideoWindow=0) #self.cam = Device(devnum=1,showVideoWindow=0) self.splitter = wx.SplitterWindow(self, -1,style = wx.SP_3D) self.Imagethen = self.cam.getImage() self.Imagenow = self.cam.getImage() self.imagedifference = ImageChops.difference(self.Imagethen,self.Imagenow) self.Imagecomposit = self.imagedifference self.imagediffdict = {} self.imgcount = 0 for i in range(10): self.imagediffdict[i] = self.imagedifference self.quartercount = 0 self.avarage = 32 self.Bind(wx.EVT_CLOSE, self.OnCloseWindow, id = self.GetId()) maintimerID = wx.NewId() self.maintimer = wx.Timer(self, maintimerID) self.Bind(wx.EVT_TIMER, self.OnTimer, id=maintimerID)#wx.EVT_TIMER(self, maintimerID, self.OnTimer) self.glob_thing = image_view.ImageView(self.splitter, -1) self.glob_thing2 = image_view.ImageView(self.splitter, -1) self.splitter.SetMinimumPaneSize(20) self.splitter.SplitHorizontally(self.glob_thing, self.glob_thing2, 0) StartButtonID = wx.NewId() self.StartButton = wx.Button(tb, StartButtonID, "Go", wx.Point(20, 20)) #wx.EVT_BUTTON(self, StartButtonID, self.OnGoClick) self.StartButton.SetBackgroundColour(wx.BLUE) self.StartButton.SetForegroundColour(wx.WHITE) self.StartButton.SetDefault() StopButtonID = wx.NewId() self.StopButton = wx.Button(tb, StopButtonID, "Stop", wx.Point(260, 20)) #wx.EVT_BUTTON(self, StopButtonID, self.OnStopClick) display1ID = wx.NewId() self.display1 = wx.SpinCtrl(tb, display1ID, "", wx.DefaultPosition,wx.DefaultSize, wx.SP_ARROW_KEYS, 0, 200, 100, "wx.SpinCtrl") self.display1.SetValue(100) display2ID = wx.NewId() self.display2 = wx.SpinCtrl(tb, display2ID, "", wx.DefaultPosition,wx.DefaultSize, wx.SP_ARROW_KEYS, 0, 500, 100, "wx.SpinCtrl2") self.display2.SetValue(240) self.StopButton.SetBackgroundColour(wx.RED) self.StopButton.SetForegroundColour(wx.WHITE) #cbID = wx.NewId() tb.AddControl(self.StartButton) self.Bind(wx.EVT_BUTTON, self.OnGoClick, id=StartButtonID) tb.AddSeparator() #cbID = wx.NewId() tb.AddControl(self.StopButton) self.Bind(wx.EVT_BUTTON, self.OnStopClick, id=StopButtonID) tb.AddSeparator() #cbID = wx.NewId() tb.AddControl(self.display1) #self.Bind(wx.EVT_SCROLL, self.OnCombo, id=cbID) tb.AddSeparator() #cbID = wx.NewId() tb.AddControl(self.display2) #self.Bind(wx.EVT_SCROLL, self.OnCombo, id=cbID) tb.AddSeparator() self.savedirtxt = wx.TextCtrl(tb, -1, self.imagesavedir) self.Bind(wx.EVT_TEXT, self.OnSavedir, id=self.savedirtxt.GetId()) tb.AddControl(self.savedirtxt) self.diffdirtxt = wx.TextCtrl(tb, -1, self.diffsavedir) self.Bind(wx.EVT_TEXT, self.OnDiffdir, id=self.diffdirtxt.GetId()) tb.AddControl(self.diffdirtxt) self.SetToolBar(tb) tb.Realize() self.main_sizer = wx.BoxSizer(wx.VERTICAL) #self.button_sizer = wx.BoxSizer(wx.HORIZONTAL) #self.text_sizer = wx.BoxSizer(wx.HORIZONTAL) #self.button_sizer.Add(self.StartButton, 1, wx.EXPAND) #self.button_sizer.Add(self.StopButton, 1, wx.EXPAND) #self.text_sizer.Add(self.display1, 1, wx.EXPAND) #self.text_sizer.Add(self.display2, 1, wx.EXPAND) #self.main_sizer.Add(self.button_sizer, 1, wx.EXPAND) #self.main_sizer.Add(self.text_sizer, 1, wx.EXPAND) self.main_sizer.Add(self.splitter, 1, wx.EXPAND)# #self.main_sizer.Add(self.glob_thing2, 10, wx.EXPAND) self.SetSizer(self.main_sizer) self.SetAutoLayout(1) self.main_sizer.Fit(self) # << class MyFrame methods >> (2 of 8) def OnTimer(self, event): self.Imagethen = self.Imagenow self.Imagenow = self.cam.getImage() self.imagedifference = ImageChops.difference(self.Imagethen,self.Imagenow) #self.imagedifference = self.Imagenow #print self.Imagenow.mode, ' ', self.imagedifference.mode #enh = ImageEnhance.Sharpness(self.imagedifference) #img = enh.enhance(self.display1.GetValue()/100) #enh = ImageEnhance.Color(img) #img = enh.enhance(self.display2.GetValue()/100) #self.imagedifference = self.imagedifference.convert('L') #self.imagediffdict[9] = self.imagediffdict[8] #self.imagediffdict[8] = self.imagediffdict[7] #self.imagediffdict[7] = self.imagediffdict[6] #self.imagediffdict[6] = self.imagediffdict[5] #self.imagediffdict[5] = self.imagediffdict[4] #self.imagediffdict[4] = self.imagediffdict[3] #self.imagediffdict[3] = self.imagediffdict[2] #self.imagediffdict[2] = self.imagediffdict[1] #self.imagediffdict[1] = self.imagediffdict[0] #self.imagediffdict[0] = self.imagedifference #self.Imagecomposit = self.imagedifference #for i in range(10): # self.Imagecomposit = ImageChops.lighter(self.Imagecomposit , self.imagediffdict[i]) #Image.blend(self.Imagethen , self.imagediffdict[i], 0.1) self.Imagecomposit = ImageChops.lighter(self.Imagecomposit , self.imagedifference) self.imgcount = self.imgcount + 1 if self.imgcount >= self.cyclenum: self.glob_thing.set_image(self.Imagecomposit) self.glob_thing2.set_image(self.Imagenow) stats = ImageStat.Stat(self.imagedifference) num1 = int(self.display2.GetValue()) #print img.histogram() if stats.extrema[0][1] > num1: self.Imagenow.save(self.imagesavedir + str(int(time.time())) + str(self.quartercount) + '.jpg') self.imagedifference.save(self.diffsavedir + str(self.quartercount) + str(int(time.time())) + '.jpg') self.avarage = ((self.avarage + num1) / 2) + 1 self.quartercount = self.quartercount +1 if self.quartercount == 4: self.quartercount = 0 #num1 = int(stats.sum[0] / 10000) + int(stats.sum[1] / 10000) + int(stats.sum[2] / 10000) self.display1.SetValue(int(stats.extrema[0][1])) self.imgcount = 0 # << class MyFrame methods >> (3 of 8) def OnCombo(self, event): #print event.GetInt() self.cyclenum = event.GetInt() # << class MyFrame methods >> (4 of 8) def OnSavedir(self, event): #print event.GetInt() self.OnSavedir = event.GetString() # << class MyFrame methods >> (5 of 8) def OnDiffdir(self, event): #print event.GetInt() self.diffsavedir = event.GetString() # << class MyFrame methods >> (6 of 8) def OnCloseWindow(self, event): self.Destroy() # << class MyFrame methods >> (7 of 8) def OnGoClick(self, event): self.maintimer.Start(25) # << class MyFrame methods >> (8 of 8) def OnStopClick(self, event): self.maintimer.Stop() # -- end -- << class MyFrame methods >> # << Cameratest methods >> (2 of 2) class MyApp(wx.App): # << class MyApp methods >> def OnInit(self): # Create an instance of our customized Frame class frame = MyFrame(None, -1, "camera difference") frame.Show(True) # Tell wx.Windows that this is our main window self.SetTopWindow(frame) # Return a success flag return True # -- end -- << class MyApp methods >> # -- end -- << Cameratest methods >> app = MyApp(0) # Create an instance of the application class app.MainLoop() # Tell it to start processing events