欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PIL库使用实例:图片像素风处理

程序员文章站 2022-03-10 20:01:14
图片像素风处理处理的图片如下1.中心算法将一个像素框中心位置的像素颜色复制给该块中其他每个像素from PIL import Image# 打开一个jpg图像文件im = Image.open('test.jpg')# 图片裁剪(left, upper, right, lower)# im = im.crop((0, 1, 1080, 1081))# 获得图像尺寸:w, h = im.sizeprint("图片尺寸为%sx%s"%(w,h))i = 2print("推荐可用像素...

图片像素风处理

待处理的图片如下
PIL库使用实例:图片像素风处理
1.中心算法
将一个像素框中心位置的像素颜色复制给该块中其他每个像素

from PIL import Image

# 打开一个jpg图像文件
im = Image.open('test.jpg')
# 图片裁剪(left, upper, right, lower)
# im = im.crop((0, 1, 1080, 1081))
# 获得图像尺寸:
w, h = im.size
print("图片尺寸为%sx%s"%(w,h))
i = 2
print("推荐可用像素块大小有:")
while i < 20:  # 像素块大小上限20
    if w % i == 0 and h % i == 0:
        print(i,end=" ")
    i += 1
print()
# 像素框大小
box = int(input("输入像素框大小:"))
# a横坐标 b纵坐标
print("等待像素化处理 Loading...")
b = 0
while b < h:
    a = 0
    while a < w:
        # 获取某个像素位置的值
        rgb = im.getpixel((a+int(box/2),b+int(box/2)))
        # rgb = im.getpixel((a,b))  # 左上角算法
        # x横像素框 y纵像素框
        y = 0
        while y < box:
            x = 0
            while x < box:
                im.putpixel((a+x,b+y),rgb)
                x += 1
            y += 1
        a += box
    b += box
# 把缩放后的图像用jpeg格式保存:
print("处理完成,输出out中心.jpg")
im.save('out中心.jpg', 'jpeg')

中心位置像素比左上角的像素更具有代表性
处理结果(像素块大小为10)
PIL库使用实例:图片像素风处理
2.平均算法
分别计算像素块平均RGB值并赋值给每个像素

from PIL import Image

# 打开一个jpg图像文件,注意路径要改成你自己的:
im = Image.open('test.jpg')
# 图片裁剪(left, upper, right, lower)
# im = im.crop((0, 1, 1080, 1081))
# 获得图像尺寸:
w, h = im.size
print("图片尺寸为%sx%s"%(w,h))
i = 2
print("推荐可用像素块大小有:")
while i < 20:  # 像素块大小上限20
    if w % i == 0 and h % i == 0:
        print(i,end=" ")
    i += 1
print()
# 像素框大小
box = int(input("输入像素框大小:"))
# a横坐标 b纵坐标
print("等待像素化处理 Loading...")
b = 0
while b < h:
    a = 0
    while a < w:   
        # x横像素框 y纵像素框
        # 计算像素框平均像素
        y = 0
        box_r = 0
        box_g = 0
        box_b = 0
        while y < box:
            x = 0
            while x < box:
                # 获取某个像素位置的值
                rgb = im.getpixel((a+x,b+y)) 
                box_r += rgb[0]
                box_g += rgb[1]
                box_b += rgb[2]
                x += 1
            y += 1
        # 写某个像素位置的值
        box_r = int(box_r/box/box)
        box_g = int(box_g/box/box)
        box_b = int(box_b/box/box)
        y = 0
        while y < box:
            x = 0
            while x < box:
                im.putpixel((a+x,b+y),(box_r,box_g,box_b))
                x += 1
            y += 1
        a += box
    b += box
# 把缩放后的图像用jpeg格式保存:
print("处理完成,输出out平均.jpg")
im.save('out平均.jpg', 'jpeg')

处理结果(像素块大小为10)
PIL库使用实例:图片像素风处理
该方法显示的结果没有中心算法更加明显
可以理解为一种压缩算法(让画面变糊)
算法内容过于简略,仅供学习和娱乐

本文地址:https://blog.csdn.net/weixin_44476410/article/details/107672464