예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
 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