def search_stones(img, corners, dp=1.7): """Devuelve las circunferencias encontradas en una imagen. :Param img: imagen donde buscaremos las circunferencias :Type img: IplImage :Param corners: lista de esquinas :Type corners: list :Param dp: profundidad de búsqueda de círculos :Type dp: int :Keyword dp: 1.7 era el valor que mejor funcionaba. Prueba y error """ gray = CreateMat(img.width, img.height,CV_8UC1) CvtColor(img, gray, CV_BGR2GRAY) gray_aux = CloneMat(gray) gray_aux_2 = CloneMat(gray) Canny(gray, gray_aux_2, 50,55,3) Smooth(gray_aux_2, gray_aux, CV_GAUSSIAN, 3, 5) # creo una matriz de para guardar los circulos encontrados circles = CreateMat(1, gray_aux.height*gray_aux.width, CV_32FC3) # r es el la mitad del tamaño de un cuadrado, el radio deseado r = img.width/(GOBAN_SIZE*2) # HoughCircles(image, storage, method, dp, min_dist, param1, param2, # min_radius, max_radius) HoughCircles(gray_aux, circles, CV_HOUGH_GRADIENT, dp, int(r*0.5), 50, 55,\ int(r*0.7), int(r*1.2)) return circles
def resize(src, w, h, dst=None): if isinstance(dst, tuple): dst = CreateMat(*dst) if isinstance(src, ndarray): src = asMat(src) if dst is None: dst = CreateMat(int(h), int(w), src.type) Resize(src, dst) return dst
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 grayspace(src): if isinstance(src, ndarray): from skimage.color.colorconv import rgb2gray dst = rgb2gray(src) else: if src.channels > 1: dst = CreateMat(src.height, src.width, CV_8UC1) CvtColor(src, dst, CV_BGR2GRAY) else: dst = src return dst
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
print """usage: cilpsum.py image [show|show_all] <path-to-image1> <path-to-image2> cilpsum.py video [show|show_all] <path-to-video> [M<pos-in-msec1>|F<framnumber1>] [M<pos-in-msec2>|F<framnumber2>] """ if sys.argv[1]=='video': capture = cv.CaptureFromFile(sys.argv[3]) if sys.argv[4][0]=='M': cv.SetCaptureProperty(capture, MSEC_POS, int(sys.argv[4][1:])) elif sys.argv[4][0]=='F': cv.SetCaptureProperty(capture, FRAME_POS, int(sys.argv[4][1:])) img = cv.QueryFrame(capture) im_grayscale1 = CreateMat(img.height, img.width, CV_8U) CvtColor(img,im_grayscale1,BGR2GRAY); if sys.argv[5][0]=='M': cv.SetCaptureProperty(capture, MSEC_POS, int(sys.argv[5][1:])) elif sys.argv[5][0]=='F': cv.SetCaptureProperty(capture, FRAME_POS, int(sys.argv[5][1:])) img = cv.QueryFrame(capture) im_grayscale2 = CreateMat(img.height, img.width, CV_8U) CvtColor(img,im_grayscale2,BGR2GRAY); elif sys.argv[1]=='image': im_grayscale1 = LoadImageM(sys.argv[3], GREYSCALE) im_grayscale2 = LoadImageM(sys.argv[4], GREYSCALE) else: