def put_calibrate_images(self, screen_image, cam_img): """calibrate(self, screen_image, cam_img) -> None Find the screen corners, transform matrix, and light state""" # find screen corners by comparing the difference between previous taken images if self._md is None: self._md = MotionDetector(N=2, shape=cam_img.shape) self._md.feed_image(cam_img.copy()) gray_diff = cvtColor(self._md.diff, COLOR_BGR2GRAY) quadrangles = find_polygons(gray_diff, 4, 0.1, 1000, True, 10) if quadrangles != []: self.screens = quadrangles if self.screens is not None: self.compute_transform(screen_img)
def __init__(self, test_res, test_borders=None, full_res=None, localdir=None, remotedir=None, secs=5): self.test_res = test_res self.width = test_res[0] self.height = test_res[1] self.localdir = localdir self.remotedir = remotedir self.full_res = full_res self.millisecs = secs * 1000 self.win = gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.set_border_width(10) # Unfortunately delete and destroy events don't work on the RPi. # Not sure why, but most of the time the event never gets passed. # It works on other Linux platforms. self.win.connect("delete_event", self.quit) self.win.connect("destroy", self.quit) self.drawing_area = gtk.DrawingArea() self.drawing_area.set_size_request(self.width, self.height) self.win.add(self.drawing_area) self.drawing_area.set_events( gtk.gdk.EXPOSURE_MASK | # gtk.gdk.POINTER_MOTION_MASK | # gtk.gdk.POINTER_MOTION_HINT_MASK | gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK) self.drawing_area.connect("expose-event", self.expose_handler) self.drawing_area.connect("button_press_event", self.button_press) self.drawing_area.connect("button_release_event", self.button_release) self.drawing_area.connect("motion_notify_event", self.drag_handler) # Just for testing, temporarily self.num = 0 gobject.timeout_add(self.millisecs, self.idle_handler, self.drawing_area) self.gc = None self.pixbuf = None self.imgwidth = None self.imgheight = None self.cur_img = None self.drag_start_x = None self.drag_start_y = None self.win.show_all() # And the motion detecting parts, # which are infinitely simpler than the GTK garbage: self.md = MotionDetector(test_res=test_res, test_borders=test_borders, full_res=self.full_res, localdir=self.localdir, remotedir=self.localdir, verbose=2) self.buf1 = None self.buf2 = None
def __init__(self, test_res, test_borders=None, full_res=None, localdir=None, remotedir=None, secs=5, rangefinder=None): self.test_res = test_res self.width = test_res[0] self.height = test_res[1] self.localdir = localdir self.remotedir = remotedir self.full_res = full_res self.millisecs = secs * 1000 self.use_tmp_file = True self.win = gtk.Window() self.win.set_border_width(10) # Unfortunately delete and destroy events don't work on the RPi. # Not sure why, but most of the time the event never gets passed. # It works on other Linux platforms. self.win.connect("delete_event", self.quit) self.win.connect("destroy", self.quit) vbox = gtk.VBox(spacing=3) self.win.add(vbox) self.drawing_area = gtk.DrawingArea() self.drawing_area.set_size_request(self.width, self.height) #self.win.add(self.drawing_area) vbox.pack_start(self.drawing_area) self.drawing_area.set_events( gtk.gdk.EXPOSURE_MASK | # gtk.gdk.POINTER_MOTION_MASK | # gtk.gdk.POINTER_MOTION_HINT_MASK | gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK) try: # GTK2: self.drawing_area.connect("expose-event", self.expose_handler) except TypeError: # Python3/GI GTK3: self.drawing_area.connect('size-allocate', self.on_size_allocate) self.width = self.height = 0 self.drawing_area.connect('draw', self.expose3) self.drawing_area.connect("button_press_event", self.button_press) self.drawing_area.connect("button_release_event", self.button_release) self.drawing_area.connect("motion_notify_event", self.drag_handler) # Just for testing, temporarily self.num = 0 glib.timeout_add(self.millisecs, self.idle_handler, self.drawing_area) # GTK2: X GC self.gc = None self.redgc = None self.pixbuf = None self.imgwidth = None self.imgheight = None self.cur_img = None self.drag_start_x = None self.drag_start_y = None try: self.win.show_all() except: print("Couldn't show window: exiting") sys.exit(1) # And the motion detecting parts, # which are infinitely simpler than the GTK garbage: self.md = MotionDetector(test_res=test_res, test_borders=test_borders, full_res=self.full_res, sensitivity=400, threshold=30, localdir=self.localdir, remotedir=self.localdir, rangefinder=rangefinder, verbose=2) self.buf1 = None self.buf2 = None