Maison  >  Article  >  développement back-end  >  Exemple de code Python pour implémenter la pixellisation d'image

Exemple de code Python pour implémenter la pixellisation d'image

不言
不言avant
2018-12-12 11:01:143734parcourir

Le contenu de cet article concerne les exemples de code Python pour implémenter la pixellisation des images. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Cause

J'ai vu des images en pixels sur Internet et je les ai trouvées assez intéressantes, j'ai donc prévu d'en écrire une en utilisant des bibliothèques PIL en python.

Exemple de code Python pour implémenter la pixellisation dimage

Idée de mise en œuvre

Divisez une image en plusieurs blocs, la couleur de chaque bloc est égale à cette couleur. coloriez avec le plus de couleurs dans le bloc, comme indiqué ci-dessous.

Exemple de code Python pour implémenter la pixellisation dimage

Cette image prend 2 × 2 pixels comme taille de bloc, stocke la couleur dans le bloc et le nombre d'occurrences de chaque couleur dans le dictionnaire, prend la plus grande couleur, et le remplit tout le bloc.

Mise en œuvre spécifique

from PIL import Image
def init():
    # 设置每个像素区块的大小
    block_size = 75
    img = Image.open("a.jpg")
    # 获取图片的宽高
    width, height = img.size
    # 获取像素点对应RGB颜色值,可以改变img_array中的值来改变颜色值
    img_array = img.load()
    # 为了处理最后的区块,加了一次循环
    max_width = width + block_size
    max_height = height + block_size
    for x in range(block_size - 1, max_width, block_size):
        for y in range(block_size - 1, max_height, block_size):
            # 如果是最后一次循环,则x坐标等于width - 1
            if x == max_width - max_width % block_size - 1:
                x = width - 1
            # 如果是最后一次循环,则x坐标等于height - 1
            if y == max_height - max_height % block_size - 1:
                y = height - 1
            # 改变每个区块的颜色值
            change_block(x, y, block_size, img_array)
            y += block_size
        x += block_size
    img.save(r'D:\python\pixel_image\awesome_copy.png')
    img.show()

"""
:param x坐标 x: 
:param y坐标 y: 
:param 区块大小 black_size: 
:param 可操作图片数组 img_array: 
"""
def change_block(x, y, black_size, img_array):

    color_dist = {}
    block_pos_list = []
    for pos_x in range(-black_size + 1, 1):
        for pos_y in range(-black_size + 1, 1):
            # todo print(x + pos_x,y + pos_y)
            block_pos_list.append([x + pos_x, y + pos_y])
    for pixel in block_pos_list:
        if not str(img_array[pixel[0], pixel[1]]) in color_dist.keys():
            color_dist[str(img_array[pixel[0], pixel[1]])] = 1
        else:
            color_dist[str(img_array[pixel[0], pixel[1]])] += 1
    # key-->value => value-->key
    new_dict = {v: k for k, v in color_dist.items()}
    max_color = new_dict[max(color_dist.values())]
    # 将区块内所有的颜色值设置为颜色最多的颜色
    for a in block_pos_list:
        img_array[a[0], a[1]] = tuple(list(map(int, max_color[1:len(max_color) - 1].split(","))))


def get_key(dict, value):
    return [k for k, v in dict.items() if v == value]


if __name__ == "__main__":
    init()

Comparaison des effets

Exemple de code Python pour implémenter la pixellisation dimage

Exemple de code Python pour implémenter la pixellisation dimage

Résumé

Adresse open sourcehttps://github.com/MasakiOvO/...

Aussi Il devrait y avoir de meilleures solutions pour de nombreuses améliorations, comme l'algorithme d'obtention des valeurs de couleur, qui devrait être implémenté à l'aide de plusieurs processus, afin que la vitesse du programme soit beaucoup plus rapide.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer