이미지 픽셀화를 구현하는 Python 코드 예제

不言
풀어 주다: 2018-12-12 11:01:14
앞으로
3745명이 탐색했습니다.

이 문서의 내용은 Python에서 이미지 픽셀화를 구현하는 코드 예제에 관한 것입니다. 특정 참조 값이 있으므로 도움이 될 수 있습니다.

Cause

인터넷에서 픽셀 그림을 보고 꽤 흥미로워서 Python에서 PIL 라이브러리를 사용하여 하나 작성하려고 했습니다.

이미지 픽셀화를 구현하는 Python 코드 예제

구현 아이디어

그림을 여러 블록으로 나누고, 각 블록의 색상은 아래와 같이 해당 색상 블록에서 가장 많은 색상을 포함하는 색상과 동일합니다.

이미지 픽셀화를 구현하는 Python 코드 예제

이 사진은 블록 크기로 2×2 픽셀을 사용하고, 블록의 색상과 사전의 각 색상의 발생 횟수를 저장하고, 가장 큰 색상을 가져와 전체 블록을 채웁니다.

특정 구현

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()
로그인 후 복사

효과 비교

이미지 픽셀화를 구현하는 Python 코드 예제

이미지 픽셀화를 구현하는 Python 코드 예제

요약

오픈 소스 주소https://github.com/MasakiOvO/...

많습니다 개선 사항 색상 값을 얻기 위한 알고리즘과 같은 일부 영역에서는 더 나은 솔루션이 있어야 하며, 이는 여러 프로세스를 사용하여 구현되어야 프로그램 속도가 훨씬 빨라집니다.

위 내용은 이미지 픽셀화를 구현하는 Python 코드 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿