def check_contours(self, conts, scale_factor): if not conts.v_next(): #proper square has white holes return False conts = self._get_approx(conts) if (len(conts) != 4): # proper square has 4 sides # print "wrong sides" return False oconts = list(conts) conts = [(x * scale_factor, y * scale_factor) for x, y in conts] conts = standarize_contours(conts) ans, data = self._check_rectangle(conts, scale_factor) if ans is False: # this isnt proper square marker db.PolyLine(self.m_d.draw_img, [conts], True, (255, 255, 0), data) return False db.PolyLine(self.m_d.draw_img, [conts], True, (255, 255, 0), None) (ident, rotation) = data rect = conts[rotation:] + conts[:rotation] if ident == self.ident: #we found it! self.set_new_position(rect, scale=scale_factor) return True else: # we found square marker but with different identifier return (int(ident), rect)
def check_contours(self, conts,scale_factor): if not conts.v_next(): #proper square has white holes return False conts = self._get_approx(conts) if (len(conts) != 4): # proper square has 4 sides # print "wrong sides" return False oconts = list(conts) conts = [(x*scale_factor,y*scale_factor) for x,y in conts] conts = standarize_contours(conts) ans, data = self._check_rectangle(conts,scale_factor) if ans is False: # this isnt proper square marker db.PolyLine(self.m_d.draw_img, [conts], True, (255, 255, 0),data) return False db.PolyLine(self.m_d.draw_img, [conts], True, (255, 255, 0),None) (ident, rotation) = data rect = conts[rotation:] + conts[:rotation] if ident == self.ident: #we found it! self.set_new_position(rect,scale=scale_factor) return True else: # we found square marker but with different identifier return (int(ident), rect)
def setUp(self): size = 100 offset = 20 so = size - offset angle = 45 move = (0, 0) scale = 0.5 center = (size / 2, size / 2) time = 1 points = [(offset, offset), (so, offset), (so, so), (offset, so)] img = cv.CreateImage((size, size), 8, 1) cv.SetZero(img) points = rotate_points(points, center, angle) corners = [Corner(points, 0), Corner(points, 1), Corner(points, 2), Corner(points, 3)] npoints = rotate_points(points, center, 3) npoints = map(lambda x:add((2, 2), int_point(x)), npoints) npoints = standarize_contours(npoints) ncorners = [Corner(npoints, 0,imgtime=1), Corner(npoints, 1,imgtime=1), Corner(npoints, 2,imgtime=1), Corner(npoints, 3,imgtime=1)] for i, cor in enumerate(ncorners): cor.compute_change(corners[i]) self.points = npoints self.old_corners = corners self.corners = ncorners self.size = size cv.AddS(img, 255, img) self.draw_img = img self.timg = cv.CloneImage(img) self.tmp_img = cv.CloneImage(img) pass