# Path: src/cte.py
# NUM_EDGES = 4


from cv import Canny
from cv import Smooth
from cv import CreateMat
from cv import CreateMemStorage
from cv import CreateImage
from cv import FindContours
from cv import CV_RETR_TREE
from cv import CV_CHAIN_APPROX_NONE
from cv import CV_POLY_APPROX_DP
from cv import CV_RGB2GRAY
from cv import ContourArea
from cv import IPL_DEPTH_8U
from cv import CvtColor
from cv import GetMat
from cv import CV_GAUSSIAN
from cv import ApproxPoly
from math import sqrt
from src.cte import NUM_EDGES


def filter_image(img):
    """Aplicamos unos filtros a las imágenes para facilitar su tratamiento. Buscamos contornos y suavizamos. 

    :Param img: imagen sin filtrar
    :Type img: CvMat
    :Return: imagen filtrada
    :Rtype: CvMat """
    aux_1 = CreateMat(img.rows, img.cols, img.type)
    aux_2 = CreateMat(img.rows, img.cols, img.type)
    Canny(img, aux_2, 50, 200, 3)
    Smooth(aux_2, aux_1, CV_GAUSSIAN, 3, 3)
    return aux_1


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:

# Path: src/cte.py
# NUM_EDGES = 4


# Path: src/search_goban.py
from cv import Canny
from cv import Smooth
from cv import CreateMat
from cv import CreateMemStorage
from cv import CreateImage
from cv import FindContours
from cv import CV_RETR_TREE
from cv import CV_CHAIN_APPROX_NONE
from cv import CV_POLY_APPROX_DP
from cv import CV_RGB2GRAY
from cv import ContourArea
from cv import IPL_DEPTH_8U
from cv import CvtColor
from cv import GetMat
from cv import CV_GAUSSIAN
from cv import ApproxPoly
from math import sqrt
from src.cte import NUM_EDGES



def filter_image(img):
    """Aplicamos unos filtros a las imágenes para facilitar su tratamiento. Buscamos contornos y suavizamos. 

    :Param img: imagen sin filtrar
    :Type img: CvMat
    :Return: imagen filtrada
    :Rtype: CvMat """
    aux_1 = CreateMat(img.rows, img.cols, img.type)
    aux_2 = CreateMat(img.rows, img.cols, img.type)
    Canny(img, aux_2, 50, 200, 3)
    Smooth(aux_2, aux_1, CV_GAUSSIAN, 3, 3)
    return aux_1


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) > \