Heim > Backend-Entwicklung > Python-Tutorial > Python-Codebeispiel zur Implementierung der Bildverpixelung

Python-Codebeispiel zur Implementierung der Bildverpixelung

不言
Freigeben: 2018-12-12 11:01:14
nach vorne
3764 Leute haben es durchsucht

Der Inhalt dieses Artikels befasst sich mit den Codebeispielen von Python zur Implementierung der Bildpixelung. Ich hoffe, dass er für Freunde hilfreich ist.

Ursache

Ich habe Pixelbilder im Internet gesehen und fand sie ziemlich interessant, also hatte ich vor, eines mit einigen PIL-Bibliotheken in Python zu schreiben.

Python-Codebeispiel zur Implementierung der Bildverpixelung

Implementierungsidee

Teilen Sie ein Bild in mehrere Blöcke. Die Farbe jedes Blocks entspricht dieser Farbe Wählen Sie die Farbe mit den meisten Farben im Block aus, wie unten gezeigt.

Python-Codebeispiel zur Implementierung der Bildverpixelung

Dieses Bild benötigt 2×2 Pixel als Blockgröße, speichert die Farbe im Block und die Häufigkeit des Vorkommens jeder Farbe im Wörterbuch, nimmt die größte Farbe an, und füllt den ganzen Block.

Spezifische Umsetzung

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()
Nach dem Login kopieren

Wirkungsvergleich

Python-Codebeispiel zur Implementierung der Bildverpixelung

Python-Codebeispiel zur Implementierung der Bildverpixelung

Zusammenfassung

Open-Source-Adressehttps://github.com/MasakiOvO/...

Es gibt viele Verbesserungen In einigen Bereichen, wie zum Beispiel dem Algorithmus zur Gewinnung von Farbwerten, sollte es eine bessere Lösung geben, die über mehrere Prozesse implementiert werden sollte, damit die Programmgeschwindigkeit deutlich schneller wird.

Das obige ist der detaillierte Inhalt vonPython-Codebeispiel zur Implementierung der Bildverpixelung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage