예제 #1
0
def split_digit(imag):
    """
    Reotrna una tupla amb la imatge del primer nombre retallat seguida de la resta de la imatge
    >>> split_digit(("1", [[255,255,0,255,255,0,0,0,255],[255,0,0,255,255,255,255,255,255],[255,255,0,255,255,0,0,0,255],[255,255,0,255,255,0,0,0,255]]))
    (('1', [[255, 0], [0, 0], [255, 0], [255, 0]]), ('1', [[255, 255, 0, 0, 0, 255], [255, 255, 255, 255, 255, 255], [255, 255, 0, 0, 0, 255], [255, 255, 0, 0, 0, 255]]))
    """
    matrix = img.matrix(imag)
    if (img.format(img.img(matrix)) != "1"):  #Nomes pot ser blanci negre
        raise Exception("The format must be black and white")

    start = findBlack(
        matrix)  #Troba on comenca el nombre (columna de pixels negres)
    if (
            start == None
    ):  #Si no es troba pixels negres es retornara una imatge nula, ja que no hi ha cap mes nombre per retallar
        return img.null()

    finish = findWhite(
        matrix, start
    )  #Troba on acaba el nombre, es a dir a la columna abans d'on nomes hi ha una columna blanca

    croppedNumber = img.subimg(
        imag, start, 0, finish - start, len(matrix)
    )  #Retalla el nombre --> Des don comenca el nombre, amb l'amplada que te  = Final - comencament
    endCropped = img.subimg(imag, finish + 1, 0,
                            len(matrix[0]) - finish + 1,
                            len(matrix))  #La resta del nombre
    return (croppedNumber, endCropped
            )  #Retorna la tupla  amb el nombre retallat i la  resta
예제 #2
0
def save(i, nomf):
    """
    Donada una imatge i un nom de fitxer, crea el fitxer imatge a
    partir de la matriu.
    """
    image = Image.new(img.format(i), (img.get_w(i), img.get_h(i)))
    image.putdata([pixel for F in img.matrix(i) for pixel in F])
    image.save(nomf)
예제 #3
0
def show(i):
    """
    Donada una imatge, la mostra en un visualitzador a la terminal. 
    Principalment serveix per a depurar el projecte.
    """
    image = Image.new(img.format(i), (img.get_w(i), img.get_h(i)))
    image.putdata([pixel for F in img.matrix(i) for pixel in F])
    image.show()
예제 #4
0
def sim(smallImag, bigImag, start=0):
    """
    Retorna la similitud entre 2 imatges
    >>> sim(('1', [[255, 255], [255, 255], [255, 255]]),('1', [[255, 255], [255, 255], [255, 255]]))
    6
    >>> sim(('1', [[255, 0], [255, 255], [255, 255]]),('1', [[255, 0], [255, 0], [255, 255]]))
    5
    >>> sim(('1', [[255, 0], [255, 255], [255, 255]]),('RGB', [[(255,255,255), (0,0,0)], [(255,255,255), (0,0,0)], [(255,255,255), (255,255,255)]]))
    5
    >>> sim(('1', [[255, 0], [255, 255], [255, 255]]),('1', [[255, 0, 255], [255, 0, 255], [255, 255, 255]]),1)
    3
    >>> sim(('1', [[255, 0, 255], [255, 255, 255], [255, 255, 255]]),('1', [[255, 0, 255], [255, 0, 255], [255, 255, 255]]),0)
    8
    """
    compareWhitem1 = 255  #El pixel blanc
    if (
            img.format(smallImag) == "RGB"
    ):  #Si el format es RGB s'haura de comparar amb el pixel blanc en format RGB
        compareWhitem1 = (255, 255, 255)

    compareWhitem2 = 255  #S'aplica de la mateixa manera per la imatge 2
    if (img.format(bigImag) == "RGB"):
        compareWhitem2 = (255, 255, 255)

    m1 = img.matrix(smallImag)  # Agafa les matrius de les imatges
    m2 = img.matrix(bigImag)

    samePixels = 0  #Pixels iguals
    for row in range(len(m1)):
        for col in range(len(m1[0])):
            if (
                    m1[row][col] == compareWhitem1
                    and m2[row][col + start] == compareWhitem2
            ):  #Si el pixel es blanc a les dues imatges la similitud es suma 1 als pixels en comu
                samePixels += 1
            elif (
                    m1[row][col] != compareWhitem1
                    and m2[row][col + start] != compareWhitem2
            ):  #Si el pixel no es blanc en les dues (es a dir que es negre) tambe se suma 1
                samePixels += 1
    return samePixels