コード例 #1
0
ファイル: processamentos.py プロジェクト: wscsnapper/Trabalho
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        if params is None:
            params = 90

        indice = int((params % 360) / 90)
        pixels = imagem.get_pixels()
        novos_pixels = []

        if indice % 2 == 1:
            aux = imagem.get_largura()
            imagem.set_largura(imagem.get_altura())
            imagem.set_altura(aux)

        largura = imagem.get_largura()
        altura = imagem.get_altura()

        if indice == 1:  # 90
            for j in range(0, altura):
                for i in range(largura - 1, -1, -1):
                    novos_pixels.append(pixels[imagem.get_pixel_index(i, j)])
        elif indice == 2:  # 180
            for i in range(largura - 1, -1, -1):
                for j in range(altura - 1, -1, -1):
                    novos_pixels.append(pixels[imagem.get_pixel_index(i, j)])
        elif indice == 3:  # 270
            for j in range(altura - 1, -1, -1):
                for i in range(0, largura):
                    novos_pixels.append(pixels[imagem.get_pixel_index(i, j)])

        imagem.set_pixels(np.array(novos_pixels))
        return imagem
コード例 #2
0
ファイル: processamentos.py プロジェクト: wscsnapper/Trabalho
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        if params is None:
            params = 0
        if imagem.get_tipo() == 'P3':
            imagem = self.get_processamentos().get_escala_cinza().processar(
                imagem)

        # Cores pre-definidas
        cores = [[[45, 165, 195], [149, 248, 63], [209, 206, 54],
                  [95, 15, 191]],
                 [[127, 219, 218], [173, 228, 152], [237, 230, 130],
                  [254, 191, 99]],
                 [[0, 0, 92], [106, 9, 125], [192, 96, 161], [255, 220, 180]],
                 [[235, 236, 241], [32, 106, 93], [31, 64, 104], [27, 28, 37]]]
        random.shuffle(cores)

        # Colorir imagem
        pixels_coloridos = []
        for i in range(len(cores)):
            pixels_coloridos.append(
                self._processar_parcial(imagem, cores[i], params == 1
                                        and i >= len(cores) / 2))
        # Montar imagem
        meia_largura = imagem.get_largura()
        meia_altura = imagem.get_altura()
        largura = imagem.get_largura() * 2
        altura = imagem.get_altura() * 2

        novos_pixels = []
        for i in range(largura):
            for j in range(altura):
                indice_pixels_coloridos = int(j / meia_largura) * 2 + int(
                    i / meia_largura)
                x = i % meia_largura
                y = j % meia_altura
                indice = x * meia_largura + y

                novos_pixels.append(
                    pixels_coloridos[indice_pixels_coloridos][indice])

        imagem.set_largura(largura)
        imagem.set_altura(altura)
        imagem.set_tipo('P3')
        imagem.set_pixels(np.array(novos_pixels))
        return imagem
コード例 #3
0
ファイル: processamentos.py プロジェクト: wscsnapper/Trabalho
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        estruturante = self.get_estruturante(params)
        pixel = int((len(estruturante) - 1) / 2)

        pixels = imagem.get_pixels()
        pixels = np.reshape(pixels,
                            (imagem.get_altura(), imagem.get_largura()))
        novos_pixels = pixels.copy()
        for i in range(pixel, imagem.get_altura() - pixel):
            for j in range(pixel, imagem.get_largura() - pixel):
                for x in range(len(estruturante)):
                    for y in range(len(estruturante[1])):
                        if pixels[i][j] == 0 and estruturante[x][y] == 1:
                            novos_pixels[i - pixel + x][j - pixel + y] = 0

        novos_pixels = np.reshape(novos_pixels, len(imagem.get_pixels()))
        imagem.set_pixels(novos_pixels)
        return imagem
コード例 #4
0
ファイル: processamentos.py プロジェクト: wscsnapper/Trabalho
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        elemento = self.get_elemento(params)
        es = int((len(elemento) - 1) / 2)

        pixels = imagem.get_pixels()
        pixels = np.reshape(pixels,
                            (imagem.get_altura(), imagem.get_largura()))
        novos_pixels = pixels.copy()
        for px in range(es, imagem.get_altura() - es):
            for py in range(es, imagem.get_largura() - es):
                if pixels[px][py] == 1:
                    for ex in range(len(elemento)):
                        for ey in range(len(elemento[1])):
                            if elemento[ex][ey] == 1:
                                novos_pixels[px - es + ex][py - es + ey] = 1

        novos_pixels = np.reshape(novos_pixels, len(imagem.get_pixels()))
        imagem.set_pixels(novos_pixels)
        return imagem
コード例 #5
0
ファイル: processamentos.py プロジェクト: wscsnapper/Trabalho
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        if params is None:
            params = 64

        kernelx = [[-1, 0, 1], [2, 0, -2], [1, 0, -1]]
        kernelx = np.asarray(kernelx)
        kernely = [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]
        kernely = np.asarray(kernely)
        ks = int((len(kernelx) - 1) / 2)

        largura = imagem.get_largura()
        altura = imagem.get_altura()
        novos_pixels = []

        if imagem.get_tipo() == 'P3':
            pixels = np.reshape(imagem.get_pixels(), (altura, largura, 3))
            for x in range(ks, largura - ks):
                for y in range(ks, altura - ks):
                    sum = [0, 0, 0]
                    for k in range(3):
                        sumx = 0
                        sumy = 0
                        for ki in range(len(kernelx)):
                            for kj in range(len(kernelx[1])):
                                sumx = sumx + (
                                    pixels[x - ks + ki][y - ks + kj][k] *
                                    kernelx[ki][kj])
                                sumy = sumy + (
                                    pixels[x - ks + ki][y - ks + kj][k] *
                                    kernely[ki][kj])
                        sumxy = math.sqrt((sumx**2) + (sumy**2))
                        sum[k] = max(sumxy, params)
                        sum[k] = int(sum[k]) if sum[k] != params else 0
                    novos_pixels.append(sum)
        else:
            pixels = np.reshape(imagem.get_pixels(), (altura, largura))
            for x in range(ks, largura - ks):
                for y in range(ks, altura - ks):
                    sumx = 0
                    sumy = 0
                    for ki in range(len(kernelx)):
                        for kj in range(len(kernelx[1])):
                            sumx = sumx + (pixels[x - ks + ki][y - ks + kj] *
                                           kernelx[ki][kj])
                            sumy = sumy + (pixels[x - ks + ki][y - ks + kj] *
                                           kernely[ki][kj])
                    sumxy = math.sqrt((sumx**2) + (sumy**2))
                    sum = max(sumxy, params)
                    sum = int(sum) if sum != params else 0
                    novos_pixels.append(sum)

        imagem.set_pixels(np.array(novos_pixels))
        imagem.set_largura(largura - 2 * ks)
        imagem.set_altura(altura - 2 * ks)
        return imagem
コード例 #6
0
ファイル: processamentos.py プロジェクト: wscsnapper/Trabalho
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        if params is None:
            params = 0

        indice = params
        pixels = imagem.get_pixels()
        novos_pixels = []

        largura = imagem.get_largura()
        altura = imagem.get_altura()

        if indice == 0:  # Vertical
            for i in range(largura - 1, -1, -1):
                for j in range(0, altura):
                    novos_pixels.append(pixels[imagem.get_pixel_index(i, j)])
        else:  # Horizontal
            for i in range(0, largura):
                for j in range(altura - 1, -1, -1):
                    novos_pixels.append(pixels[imagem.get_pixel_index(i, j)])

        imagem.set_pixels(np.array(novos_pixels))
        return imagem
コード例 #7
0
ファイル: processamentos.py プロジェクト: wscsnapper/Trabalho
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        kernel = self.get_kernel(params)
        ks = int((len(kernel) - 1) / 2)

        largura = imagem.get_largura()
        altura = imagem.get_altura()
        novos_pixels = []

        if imagem.get_tipo() == 'P3':
            pixels = np.reshape(imagem.get_pixels(), (altura, largura, 3))
            for x in range(ks, altura - ks):
                for y in range(ks, largura - ks):
                    sum = [0, 0, 0]
                    for k in range(3):
                        for ki in range(len(kernel)):
                            for kj in range(len(kernel[1])):
                                sum[k] = sum[k] + (
                                    pixels[x - ks + ki][y - ks + kj][k] *
                                    kernel[ki][kj])
                        sum[k] = int(sum[k])
                    novos_pixels.append(np.array(sum))
        else:
            pixels = np.reshape(imagem.get_pixels(), (altura, largura))
            for x in range(ks, altura - ks):
                for y in range(ks, largura - ks):
                    sum = 0
                    for ki in range(len(kernel)):
                        for kj in range(len(kernel[1])):
                            sum = sum + (pixels[x - ks + ki][y - ks + kj] *
                                         kernel[ki][kj])
                    sum = int(sum)
                    novos_pixels.append(sum)

        imagem.set_pixels(np.array(novos_pixels))
        imagem.set_largura(largura - (2 * ks))
        imagem.set_altura(altura - (2 * ks))
        return imagem