示例#1
0
def recuperaRatioDilatacao(contornos, imgOriginal, identificador):
    ratio = 0.1
    for i, c in enumerate(contornos):
        x, y, w, h = cv2.boundingRect(c)
        b = 10
        roi = imgOriginal[y-b:y + h+b, x-b:x + w+b]
        resized = roi.copy()
        #resized = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY)
        retval, resized = cv2.threshold(resized, 120, 255, type = cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
        
        utils.save('D{}.jpg'.format(i), roi, id=identificador)
        
        preResized = resized.copy()

        print('IMAGEM: ' + str(i))
        print('=======================')
        for x in range(0, 7):
            print('Processando Ratio: ' + str(ratio))
            resized = utils.dilatation(preResized, ratio=ratio)
        
            utils.save('ratio{}_{}.jpg'.format(i,x), resized, id=identificador)
            im2, contours2, hierarchy = cv2.findContours(resized, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
            
            contours2 = removeContornosPqnos(contours2)



            if (len(contours2) == 1):
                break
            else:
                ratio += 0.3
        print()
    
    print('Ratio encontrado: ' + str(ratio))
    return ratio
示例#2
0
def extraiContornos(imgGray, identificador):
    utils.save('cnh_antesTh.jpg', imgGray, id=identificador)
    retval, imgGray = cv2.threshold(imgGray, 2, 255, type = cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
    utils.save('cnh_postTh.jpg', imgGray, id=identificador)
    
    imgGray, densidade = utils.removeContornosPqnosImg(imgGray)
    utils.save('cnh_novosContornos.jpg', imgGray, id=identificador)

    imgGray = utils.dilatation(imgGray, ratio=0.2)
    im2, contours, hierarchy = cv2.findContours(imgGray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    
    return imgGray, contours, hierarchy
示例#3
0
def extrai():
    color = cv2.imread('data\leo.jpg', 1)
    color = cv2.resize(color, (0, 0), fx=0.3, fy=0.3)
    color = utils.removeSombras(color)

    imgGray = cv2.cvtColor(color, cv2.COLOR_BGR2GRAY)
    save(imgGray)

    retval, imgGray = cv2.threshold(imgGray,
                                    2,
                                    255,
                                    type=cv2.THRESH_BINARY_INV
                                    | cv2.THRESH_OTSU)

    imgGray = utils.removeContornosPqnosImg(imgGray)
    imgGray = utils.dilatation(imgGray, ratio=0.09)

    im2, contours, hierarchy = cv2.findContours(imgGray, cv2.RETR_EXTERNAL,
                                                cv2.CHAIN_APPROX_SIMPLE)
    cnts2 = sorted(contours, key=sortAltura, reverse=True)
    assinaturas = list()

    for i, c in enumerate(cnts2):

        x, y, w, h = cv2.boundingRect(c)

        existeEntre = existeEntreAlgumaFaixa(assinaturas, y, h)
        if existeEntre == False:
            assinaturas.append((y, y + h))

        print(existeEntre)

    for ass in assinaturas:
        cv2.rectangle(color, (0, ass[0]), (color.shape[0] + w, ass[1]),
                      (255, 0, 0), 6)

    save(color)
示例#4
0
def extrai(path, identificador):
    color = cv2.imread(path, -1)
    color = cv2.resize(color, (0, 0), fx = 0.3, fy = 0.3)
    imgOriginal = color.copy()
    color = utils.removeSombras(color)
    utils.save('semSombra.jpg', color, id=identificador)

    #imgOriginal, color = recuperaAreaAssinada(color.copy(), imgOriginal, identificador)
    #utils.save('antesGray.jpg', color, id=identificador)

    imgGray = cv2.cvtColor(color, cv2.COLOR_BGR2GRAY)
    imgPbOriginal = imgGray.copy()
    utils.save('pb1.jpg', imgGray, id=identificador)
    #imgGray = rotate_bound(imgGray, 90)
    #utils.save('pb2.jpg', imgGray)

    #imgGray = cv2.blur(imgGray, (blurI, blurI))
    #utils.save('blur.jpg', imgGray)
    
    utils.save('AntesThr.jpg', imgGray, id=identificador)
    imgGray, contours, hierarchy =  extraiContornos(imgGray, identificador)
    utils.save('thr.jpg', imgGray, id=identificador)
    cnts2 = sorted(contours, key=functionSort, reverse=True)[0:5]
    
    printaContornoEncontrado(imgOriginal, cnts2, identificador)
    cnts2 = sorted(cnts2, key=functionSortPrimeiroPapel)
    printaOrdem(imgOriginal, cnts2, identificador)

    originalEmGray = cv2.cvtColor(imgOriginal, cv2.COLOR_BGR2GRAY)
    #originalHisto = cv2.equalizeHist(originalEmGray)
    originalHisto = originalEmGray
    lista = dict()
    cntArr = dict()


    #ratioDilatacao = recuperaRatioDilatacao(cnts2, imgPbOriginal, identificador)

    for i, c in enumerate(cnts2):
        x, y, w, h = cv2.boundingRect(c)
        b = 0
        #print('{} x={} - y{}'.format(i,x,y))
        utils.save('imgPbSemSombra2-{}.jpg'.format(i), imgPbOriginal, id=identificador)
        roi = imgPbOriginal[y-b:y + h+b, x-b:x + w+b]
        utils.save('roi_{}.jpg'.format(i), roi, id=identificador)
        #utils.save('_1_hist_{}.jpg'.format(i), roi)

        #roi = utils.resize(roi, width=300, height=300)
        resized = roi.copy()
        
        #resized = cv2.blur(resized, (blurI,blurI))
        #utils.save('__{}_blur1.jpg'.format(i), resized)
        
        #resized = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY)
        
        #resized = cv2.blur(resized, (5,5))
        retval, resized = cv2.threshold(resized, 120, 255, type = cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
        resized = utils.removeContornosPqnosImg(resized)

        utils.save('t_{}.jpg'.format(i), resized, id=identificador)
        cv2.waitKey(0) 
        #print('ratioDilatacao ' + str(ratioDilatacao))
        resized = utils.dilatation(resized, ratio=0.3)
        
        utils.save('t1_{}.jpg'.format(i), resized, id=identificador)
        im2, contours2, hierarchy = cv2.findContours(resized, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

        print('Ajustando espacos')
        contours2, resized = ajustaEspacosContorno(contours2, resized)
        print('espacos ajustados')


        cnts = sorted(contours2, key=functionSort, reverse=True)[0]

        #roi = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
        novaMat = np.zeros(roi.shape, dtype = "uint8")
        cv2.drawContours(novaMat, [cnts], -1, 255, -1)
        #novaMat = cv2.resize(novaMat, (200,200), interpolation = cv2.INTER_AREA)
        
        #lista[i] = mahotas.features.zernike_moments(novaMat, 21)
        lista[i] = cnts
        cntArr[i] = cnts
        utils.save('_img_{}.jpg'.format(i), novaMat, id=identificador)
        

    #utils.show(color)

    hd = cv2.createHausdorffDistanceExtractor()
    sd = cv2.createShapeContextDistanceExtractor()

    out = ""
    sizeOut = ""
    resultadoApi = True
    imgResultado = imgOriginal.copy()
    for idx1 in range(0,1): #recupera apenas a primeira imagem e a compara com as outras
        item1 = lista[idx1]
        altura1, largura1 = calculaAlturaLargura(item1)
        soma = 0
        for idx2 in range(0,5):
            item2 = lista[idx2]
            altura2, largura2 = calculaAlturaLargura(item2)
            #sizeOut += 'Altura {} - {} = {} / {}\n'.format(altura1, altura2, abs(altura1 - altura2), calcPercentual(largura1, largura2))
            #sizeOut += 'Largura {} - {} = {} / {}\n'.format(largura1, largura2, abs(largura1 - largura2), calcPercentual(largura1, largura2))
            sizeOut += 'Dimensao {} x {} \n'.format(largura2, altura2)

            tamanhoCompativel = alturaLarguraCompativel(altura1, largura1, altura2, largura2)

            #match = hd.computeDistance(item1, item2)
            #match = cv2.matchShapes(cntArr[idx1], cntArr[idx2], 1, 0.0)
            
            ida = sd.computeDistance(item1, item2)
            volta = sd.computeDistance(item2, item1)

            #ida = dist.euclidean(item1, item2)
            #volta = dist.euclidean(item2, item1)
            
            ida = round(ida, 5)
            volta = round(volta, 5)
            out += '{} vs {} ({})  ==   {} - {}\n'.format(idx1, idx2, tamanhoCompativel, ida, volta) 
        
        
            #BGR
            if ( idx2 == 0 ):
                imgResultado = contorna(imgResultado, cnts2[idx2], (0,255,0)) #sucesso
            elif ( ida < 10 and volta < 10 and tamanhoCompativel == True):
                imgResultado = contorna(imgResultado, cnts2[idx2], (0,255,0)) #sucesso
            else:
                imgResultado = contorna(imgResultado, cnts2[idx2], (0,0,255))  #falha
                resultadoApi = False
        
        

        pathTxt = utils.buildPath(identificador, path="calc.txt")
        with open(pathTxt, "w") as text_file:
            text_file.write(sizeOut)
            text_file.write('\n')
            text_file.write(out)

    utils.save(names.RESULTADO, imgResultado, id=identificador)
    
    return resultadoApi