Ejemplo n.º 1
0
def detect_contour(img):
    """Buscamos contornos con unas características determinadas para encontrar un tablero de go en una imagen.

    :Param img: imagen filtrada para buscar contornos en ella
    :Type img: CvMat
    :Return: Contorno si no lo encuentra, sino None
    :Rtype: CvSeq """
    storage = CreateMemStorage()
    seq = FindContours(img, storage, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE,
      offset=(0, 0))
    contornos=[]
    while seq:
        if len(seq) >= NUM_EDGES and \
            ((img.cols*2 + img.rows*2)*MAX_BOARD_PERIMETER) > ArcLength(seq) > ((img.cols*2 + img.rows*2)*MIN_BOARD_PERIMETER)  and \
            (img.cols*img.rows)*MAX_BOARD_AREA > ContourArea(seq) > ((img.cols*img.rows)*MIN_BOARD_AREA):
            perimeter = ArcLength(seq)
            seq_app = ApproxPoly(seq, storage, CV_POLY_APPROX_DP, perimeter*MAX_POLY_APPROX_ERROR, 1)
            if len(seq_app) == NUM_EDGES:
                contornos.append(seq_app)
        if seq.h_next() == None:
            break
        else:
            seq = seq.h_next()

    if len(contornos):
        return contornos[0]
    return None
Ejemplo n.º 2
0
def detect_contour(img):
    """Buscamos contornos con unas características determinadas para encontrar un tablero de go en una imagen. 

    :Param img: imagen filtrada para buscar contornos en ella
    :Type img: CvMat
    :Return: Contorno si no lo encuentra, sino None
    :Rtype: CvSeq """
    storage = CreateMemStorage()
    seq = FindContours(img,
                       storage,
                       CV_RETR_TREE,
                       CV_CHAIN_APPROX_NONE,
                       offset=(0, 0))
    sequence = []

    aprox = True
    while seq:
        if len(seq) >= NUM_EDGES and (img.cols*img.rows) > ContourArea(seq) > \
            ((img.cols/2)*(img.rows/2)):
            perimeter = count_perimeter(seq)
            seq_app = ApproxPoly(seq, storage, CV_POLY_APPROX_DP,
                                 perimeter * 0.02, 1)
            if len(seq_app) == NUM_EDGES:
                return seq_app
            else:
                return None
        else:
            if seq.h_next() == None:
                break
            else:
                seq = seq.h_next()
    return None
Ejemplo n.º 3
0
def detect_contour(img):
    """Buscamos contornos con unas características determinadas para encontrar un tablero de go en una imagen. 

    :Param img: imagen filtrada para buscar contornos en ella
    :Type img: CvMat
    :Return: Contorno si no lo encuentra, sino None
    :Rtype: CvSeq """
    storage = CreateMemStorage()
    seq = FindContours(img, storage, CV_RETR_TREE, CV_CHAIN_APPROX_NONE, offset=(0, 0))
    sequence = []

    aprox = True
    while seq:
        if len(seq) >= NUM_EDGES and (img.cols * img.rows) > ContourArea(seq) > ((img.cols / 2) * (img.rows / 2)):
            perimeter = count_perimeter(seq)
            seq_app = ApproxPoly(seq, storage, CV_POLY_APPROX_DP, perimeter * 0.02, 1)
            if len(seq_app) == NUM_EDGES:
                return seq_app
            else:
                return None
        else:
            if seq.h_next() == None:
                break
            else:
                seq = seq.h_next()
    return None