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