Example #1
0
def check_goban_moved(prev_corners, current_corners):
    """Comprobamos si es posible el movimiento de tablero detectado.

    :Param prev_corners: corners detectados anteriormente
    :Type prev_corners: list
    :Param current_corners: corners detectados actualmente
    :Type current_corners: list
    :Return: True si el tablero se ha movido
    :Rtype: bool """

    if not prev_corners or not current_corners:
        return True
    dist_min_of_movement = get_max_edge(prev_corners) / (2 * GOBAN_SIZE)
    " Comprobamos primero si existe mucho movimiento. "
    dist = []
    directions = []
    for i in xrange(NUM_EDGES):
        dist.append(abs(distance(prev_corners[i], current_corners[i])))
        directions.append(direction(prev_corners[i], current_corners[i]))
    f = lambda x: x > 1
    dist_list = filter(f, dist)
    if len(dist_list) > 2:
        # min_mov=1/3 square TODO check impossible movement (Direcction)
        min_mov = get_max_edge(prev_corners) / ((GOBAN_SIZE - 1) * 3.0)
        dist_list.sort()
        if (dist_list[-1] - dist_list[0]) < min_mov:
            return check_directions(directions)
        elif (dist_list[-1] - dist_list[-3]) < min_mov:
            return check_directions(directions)
        else:
            return False
    else:
        return False
Example #2
0
def check_goban_moved(prev_corners, current_corners):
    """Comprobamos si es posible el movimiento de tablero detectado.

    :Param prev_corners: corners detectados anteriormente
    :Type prev_corners: list
    :Param current_corners: corners detectados actualmente
    :Type current_corners: list
    :Return: True si el tablero se ha movido
    :Rtype: bool """

    if not prev_corners or not current_corners:
        return True
    dist_min_of_movement = get_max_edge(prev_corners)/(2*GOBAN_SIZE)
    " Comprobamos primero si existe mucho movimiento. "
    dist = []
    directions = []
    for i in xrange(NUM_EDGES):
        dist.append(abs(distance(prev_corners[i], current_corners[i])))
        directions.append(direction(prev_corners[i], current_corners[i]))
    f = lambda x: x>1
    dist_list = filter(f, dist)
    if len(dist_list) > 2:
        # min_mov=1/3 square TODO check impossible movement (Direcction)
        min_mov = get_max_edge(prev_corners)/((GOBAN_SIZE-1)*3.0)
        dist_list.sort()
        if (dist_list[-1] - dist_list[0]) < min_mov:
            return check_directions(directions)
        elif (dist_list[-1] - dist_list[-3]) < min_mov:
            return check_directions(directions)
        else:
            return False
    else:
        return False
Example #3
0
def perspective(img, corners): 
    """Crea una imagen en modelo ideal del tablero dado en perspectiva.

    :Param img: imagen con el tablero en perspectiva
    :Todo: comprobar de que tipo es la imagen TODO
    :Type img: IplImage or CvMat
    :Param corners: lista de las esquinas del tablero
    :Type corners: list
    :Return: imagen en modelo ideal
    :Rtype: IplImage
    """

    max_edge = get_max_edge(corners)
    corners = get_external_corners(corners)
    # The goban have a relation 15/14 height/width
    relation = 14/15.0
    # In the sequence, the orden of corners are ul, dl, dr, ur
    corners_transf = ((0,0),(0,max_edge),(max_edge,0),(max_edge,max_edge))
    mat = CreateMat(3, 3, CV_32FC1)
    GetPerspectiveTransform( corners, corners_transf, mat)
    src = CreateImage((max_edge, max_edge), img.depth, img.nChannels)
    WarpPerspective(img, src, mat)
    return src
Example #4
0
def perspective(img, corners):
    """Crea una imagen en modelo ideal del tablero dado en perspectiva.

    :Param img: imagen con el tablero en perspectiva
    :Todo: comprobar de que tipo es la imagen TODO
    :Type img: IplImage or CvMat
    :Param corners: lista de las esquinas del tablero
    :Type corners: list
    :Return: imagen en modelo ideal
    :Rtype: IplImage
    """

    max_edge = get_max_edge(corners)
    corners = get_external_corners(corners)
    # The goban have a relation 15/14 height/width
    relation = 14 / 15.0
    # In the sequence, the orden of corners are ul, dl, dr, ur
    corners_transf = ((0, 0), (0, max_edge), (max_edge, 0), (max_edge,
                                                             max_edge))
    mat = CreateMat(3, 3, CV_32FC1)
    GetPerspectiveTransform(corners, corners_transf, mat)
    src = CreateImage((max_edge, max_edge), img.depth, img.nChannels)
    WarpPerspective(img, src, mat)
    return src