Python sobre como fazer mosaico de fotos

classificação

Processamento de imagem-PIL-python para imagens em mosaico

Começar

contar com

Pillow                              5.2.0
python                              3.7.7

Código de oferta

# magic remark
# -*- encoding:utf-8 -*-
from PIL import Image
def _mosaic(img):
    s = img.size
    img = img.resize((10,10))
    img = img.resize(s)
    return img
def mosaic(img,fx,fy,tx,ty):
    c = img.crop((fx,fy,tx,ty))
    c = _mosaic(c)
    img.paste(c,(fx,fy,tx,ty))
    return img
if(__name__ == '__main__'):
    while(1):
        flag = False
        name = input('请输入文件名:')
        try:
            img = Image.open(name)
            flag = True
        except:
            print('无法读取文件')
        if(flag):
            break
    fx,fy,tx,ty = None,None,None,None
    while(1):
        flag = False
        name = input('请输入需要打马赛克的区域(x1,y1,x2,y2):')
        try:
            name = [int(i) for i in name.split(',')]
            if(len(name) != 4):
                raise ValueError
            fx,fy,tx,ty = name
            flag = True
        except:
            print('错误的格式')
        if(flag):
            break
    img = mosaic(img,fx,fy,tx,ty)
    while(1):
        cmd = input('处理完成,按1存储文件,按2显示文件,按3退出:')
        if(cmd == '1'):
            path = input('请输入存储路径:')
            try:
                img.save(path)
                exit()
            except:
                print('无法存储文件')
        elif(cmd == '2'):
            img.show()
        elif(cmd == '3'):
            exit()
        else:
            print('未知的命令:%s'%cmd)

efeito

efeito

Análise de código

Biblioteca de importação

# magic remark
# -*- encoding:utf-8 -*-
from PIL import Image

Código e ideias gerais

Ideias:

A essência principal está nestas poucas linhas de código:

img = img.resize((10,10))
img = img.resize(s)

Quando a imagem é reduzida, os pixels serão mesclados. Quando a
imagem é ampliada, os pixels
serão copiados. Portanto, se a imagem for reduzida e depois ampliada, os pixels mesclados serão copiados em alguns minutos e terá um efeito de mosaico.

Código:
def _mosaic(img):
    s = img.size
    img = img.resize((10,10))
    img = img.resize(s)
    return img

Código de mosaico parcial e ideias

Ideias:

Corte algumas partes, bata a imagem cortada como um todo e cole-a de volta

Código:
def mosaic(img,fx,fy,tx,ty):
    c = img.crop((fx,fy,tx,ty))
    c = _mosaic(c)
    img.paste(c,(fx,fy,tx,ty))
    return img

Nome do arquivo de entrada

if(__name__ == '__main__'):
    while(1):
        flag = False
        name = input('请输入文件名:')
        try:
            img = Image.open(name)
            flag = True
        except:
            print('无法读取文件')
        if(flag):
            break

Insira a posição de corte

    fx,fy,tx,ty = None,None,None,None
    while(1):
        flag = False
        name = input('请输入需要打马赛克的区域(x1,y1,x2,y2):')
        try:
            name = [int(i) for i in name.split(',')]
            if(len(name) != 4):
                raise ValueError
            fx,fy,tx,ty = name
            flag = True
        except:
            print('错误的格式')
        if(flag):
            break

Luta local

    img = mosaic(img,fx,fy,tx,ty)

Seção de saída

    while(1):
        cmd = input('处理完成,按1存储文件,按2显示文件,按3退出:')
        if(cmd == '1'):
            path = input('请输入存储路径:')
            try:
                img.save(path)
                exit()
            except:
                print('无法存储文件')
        elif(cmd == '2'):
            img.show()
        elif(cmd == '3'):
            exit()
        else:
            print('未知的命令:%s'%cmd)

Code github

Programa github

Autor

estrada de sucesso

Tchau, acabou a aula!

O hit-road é atualizado de tempos em tempos, veja ou saia!

Acho que você gosta

Origin blog.csdn.net/weixin_42954615/article/details/108317930
Recomendado
Clasificación