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