Python从0到100(二十三):用Python处理图像

168 阅读3分钟

在这里插入图片描述

1.入门知识

在探索图像处理的世界之前,了解一些基础知识是非常重要的。色彩和像素是构成数字图像的基石。

  1. 颜色:在传统的美术中,红、黄、蓝被认为是三原色,它们无法通过混合其他颜色得到。而在数字世界里,红、绿、蓝(RGB)光的组合形成了我们在屏幕上看到的各种颜色。计算机通过调整这三种颜色的强度来产生不同的颜色,并且可以表示透明度(通过RGBA值,其中A代表Alpha通道)。

    名称RGB值名称RGB值
    白色(255, 255, 255)红色(255, 0, 0)
    绿色(0, 255, 0)蓝色(0, 0, 255)
    灰色(128, 128, 128)黄色(255, 255, 0)
    黑色(0, 0, 0)紫色(128, 0, 128)
  2. 像素:图像的基本单元,每个像素都有一个特定的位置和颜色值。像素的集合决定了图像的最终外观。在摄影中,像素数量通常是衡量图像分辨率的一个指标。

2.Pillow库

Pillow是Python的一个图像处理库,它是Python Imaging Library (PIL) 的一个更新分支,它支持多种图像文件格式的操作,包括打开、显示、裁剪、缩放、旋转、像素操作、绘图等。

要安装Pillow,可以使用pip:

pip install pillow

Pillow的核心是Image类,它允许你读取和操作图像。以下是一些基础的操作示例:

2.1读取和显示图像

from PIL import Image

image = Image.open('guido.jpg')
print(image.format)  # 输出图像格式,比如JPEG
print(image.size)   # 输出图像尺寸,比如(500, 750)
print(image.mode)   # 输出图像模式,比如RGB
image.show()        # 显示图像

在这里插入图片描述

2.2剪裁图像

image.crop((80, 20, 310, 360)).show()

在这里插入图片描述

2.3生成缩略图

image.thumbnail((128, 128))
image.show()

在这里插入图片描述

2.4缩放和黏贴图像

guido_image = Image.open('guido.jpg')
guido_head = guido_image.crop((80, 20, 310, 360))
luohao_image = Image.open('luohao.png')
luohao_image.paste(guido_head.resize((int(guido_head.size[0] / 1.5), int(guido_head.size[1] / 1.5))), (172, 40))
luohao_image.show()

2.5旋转和翻转

image.rotate(45).show()
image.transpose(Image.FLIP_TOP_BOTTOM).show()

2.6操作像素

for x in range(80, 310):
    for y in range(20, 360):
        image.putpixel((x, y), (128, 128, 128))
image.show()

2.7滤镜效果

from PIL import ImageFilter

image.filter(ImageFilter.CONTOUR).show()

在这里插入图片描述

3.使用Pillow绘图

ImageDraw模块提供了绘图功能,可以绘制形状和添加文字。以下是一个绘图示例:

import random
from PIL import Image, ImageDraw, ImageFont

def random_color():
    return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)

image = Image.new('RGB', (800, 600), color=(255, 255, 255))
drawer = ImageDraw.Draw(image)
font = ImageFont.truetype('Kongxin.ttf', 32)
drawer.text((300, 50), 'Hello, world!', fill=(255, 0, 0), font=font)
drawer.line((0, 0, 800, 600), fill=(0, 0, 255), width=2)
drawer.line((800, 0, 0, 600), fill=(0, 0, 255), width=2)
drawer.rectangle((300, 200, 500, 300), outline=(255, 0, 0), width=2)
for _ in range(4):
    drawer.ellipse((150, 220, 310, 380), outline=random_color(), width=8)
image.show()
image.save('result.png')

4.总结

Python提供了强大的库来处理图像,如Pillow和OpenCV,这些库可以帮助我们完成从简单的图像编辑到复杂的图像分析的各种任务。通过编程,我们可以自动化许多重复性的工作,提高效率。图像处理只是Python应用的冰山一角,它的能力远不止于此。继续探索Python的世界,你会发现更多令人兴奋的可能性。