答案:Pillow是Python图像处理的核心库,支持图像读取、保存、裁剪、旋转、缩放、滤镜应用等操作,通过Image模块实现基础功能,ImageFilter模块提供模糊、锐化、边缘检测等内置滤镜,结合ImageDraw可添加文字水印,支持像素级操作与颜色模式转换;对于高性能需求或超大图像处理,其内存占用高、计算效率有限,可结合NumPy进行数组运算优化,或转向OpenCV(适用于实时处理与计算机视觉)与scikit-image(适用于科学图像分析)等更专业的库以突破局限。

Python进行图像处理,最常用且功能强大的库之一是PIL(Pillow)。它提供了一系列工具,可以轻松实现图像的读取、保存、裁剪、旋转、调整大小、滤镜应用等操作,让开发者能够以代码的方式高效地操作图像文件。
谈到Python里的图像处理,我脑子里首先浮现的就是Pillow库。它其实是PIL(Python Imaging Library)的一个友好分支,因为PIL本身已经停止更新很久了,而Pillow则完美地接棒,持续维护和发展。在我看来,它简直是Python处理图像的瑞士军刀,从最简单的图片打开、保存,到复杂的像素操作、滤镜应用,几乎都能胜任。
要开始使用Pillow,首先得安装它:
pip install Pillow
安装好之后,我们就可以开始玩转图片了。以下是一些核心操作的示例,你会发现它的API设计得非常直观。
立即学习“Python免费学习笔记(深入)”;
1. 打开和显示图片
这是最基础的一步。Image.open() 方法会返回一个 Image 对象,代表了你的图片。
from PIL import Image
try:
    img = Image.open("example.jpg") # 确保当前目录下有这张图片
    print(f"图片格式: {img.format}, 尺寸: {img.size}, 模式: {img.mode}")
    img.show() # 在默认图片查看器中显示图片
except FileNotFoundError:
    print("错误:example.jpg 文件未找到。请确保图片存在。")
except Exception as e:
    print(f"打开图片时发生错误: {e}")这里 img.format 会告诉你图片是JPEG、PNG还是其他格式,img.size 是一个元组 (width, height),img.mode 则是图片的像素模式,比如'RGB'(真彩色)、'L'(灰度图)等。
2. 保存图片
处理完图片后,通常需要保存下来。save() 方法非常灵活,你可以指定新的文件名和格式。
# 假设我们已经打开了一张图片 img
img.save("new_example.png") # 保存为PNG格式,Pillow会根据后缀自动识别
img.save("compressed_example.jpg", quality=80) # 保存为JPEG,并指定压缩质量(0-100)
print("图片已保存。")3. 调整图片大小 (Resize)
这是我个人最常用到的功能之一,比如上传头像、生成缩略图。
# 假设 img 是一张图片
width, height = img.size
new_size = (width // 2, height // 2) # 缩小到原来的一半
resized_img = img.resize(new_size)
resized_img.save("resized_example.jpg")
# 也可以使用 thumbnail 方法,它会保持图片的宽高比,并且只在图片大于指定尺寸时缩小
img.thumbnail((128, 128)) # 如果图片大于128x128,则缩小到128x128,保持比例
img.save("thumbnail_example.jpg")
print("图片已调整大小。")thumbnail 方法在处理缩略图时尤其方便,它不会拉伸图片,只会等比例缩小。
4. 裁剪图片 (Crop)
如果你只需要图片的一部分,裁剪功能就派上用场了。crop() 方法需要一个四元组 (left, upper, right, lower) 来定义裁剪区域。
# 裁剪图片,从左上角 (100, 100) 到右下角 (300, 300)
cropped_img = img.crop((100, 100, 300, 300))
cropped_img.save("cropped_example.jpg")
print("图片已裁剪。")5. 旋转图片 (Rotate)
图片旋转也很常见,比如纠正照片方向。
rotated_img = img.rotate(90) # 顺时针旋转90度
rotated_img.save("rotated_90_example.jpg")
# 还可以进行翻转操作
flipped_horizontal_img = img.transpose(Image.FLIP_LEFT_RIGHT)
flipped_horizontal_img.save("flipped_h_example.jpg")
print("图片已旋转或翻转。")6. 颜色模式转换
有时候我们需要将彩色图片转换为灰度图,或者反之。
grayscale_img = img.convert("L") # 转换为灰度图 (L代表Luminance)
grayscale_img.save("grayscale_example.jpg")
# 如果想转回RGB,可以这样做(虽然灰度图转回RGB不会恢复颜色)
rgb_img = grayscale_img.convert("RGB")
rgb_img.save("grayscale_to_rgb_example.jpg")
print("图片已转换颜色模式。")这些只是Pillow库的冰山一角,但它们构成了日常图像处理的基石。掌握了这些,你会发现很多图像相关的自动化任务变得轻而易举。
当基础操作满足不了需求时,Pillow提供了一些内置的滤镜和更灵活的像素级操作,让我们能实现更高级的效果。我经常用到的就是它的ImageFilter模块,以及直接操作像素数据的能力。
1. 应用内置滤镜
Pillow自带了一些常用的图像滤镜,比如模糊、锐化、边缘检测等。这些滤镜通常封装在PIL.ImageFilter模块中,用起来非常方便。
from PIL import Image, ImageFilter
try:
    img = Image.open("example.jpg")
    # 应用模糊滤镜
    blurred_img = img.filter(ImageFilter.BLUR)
    blurred_img.save("blurred_example.jpg")
    # 应用边缘检测滤镜
    edge_detected_img = img.filter(ImageFilter.FIND_EDGES)
    edge_detected_img.save("edge_detected_example.jpg")
    # 应用锐化滤镜
    sharpened_img = img.filter(ImageFilter.SHARPEN)
    sharpened_img.save("sharpened_example.jpg")
    print("已应用多种内置滤镜。")
except FileNotFoundError:
    print("错误:example.jpg 文件未找到。")
except Exception as e:
    print(f"应用滤镜时发生错误: {e}")ImageFilter里还有CONTOUR(轮廓)、EMBOSS(浮雕)、SMOOTH(平滑)等多种滤镜,可以根据需求尝试。
2. 图像合成与叠加
Pillow允许你将多张图片合成或叠加在一起,这在制作水印、海报或图片蒙版时非常有用。Image.alpha_composite()和Image.paste()是两个核心方法。
from PIL import Image
try:
    base_img = Image.open("example.jpg").resize((400, 300)) # 调整大小方便演示
    # 创建一个半透明的水印图片
    watermark_text = Image.new("RGBA", (200, 100), (255, 255, 255, 0)) # 全透明背景
    from PIL import ImageDraw, ImageFont
    draw = ImageDraw.Draw(watermark_text)
    try:
        font = ImageFont.truetype("arial.ttf", 30) # 尝试加载字体,Windows系统一般有arial.ttf
    except IOError:
        font = ImageFont.load_default() # 如果找不到arial.ttf,则使用默认字体
        print("警告:未找到arial.ttf,使用默认字体。")
    draw.text((10, 20), "My Watermark", font=font, fill=(0, 0, 0, 128)) # 黑色半透明文字
    # 将水印粘贴到基础图片上
    # paste方法可以指定一个mask,实现透明度效果
    base_img.paste(watermark_text, (base_img.width - watermark_text.width - 10,
                                    base_img.height - watermark_text.height - 10),
                   watermark_text)
    base_img.save("watermarked_example.png")
    print("图片已添加水印。")
except FileNotFoundError:
    print("错误:example.jpg 文件未找到。")
except Exception as e:
    print(f"合成图片时发生错误: {e}")这里用到了ImageDraw模块来在图片上绘制文本,这在生成动态图片或添加文字说明时非常实用。
3. 像素级操作
对于更精细的控制,你可以直接访问和修改图片的像素数据。Pillow提供了load()方法来获取像素访问对象,或者getpixel()和putpixel()。不过,直接遍历像素通常效率不高,更推荐使用point()或eval()方法配合函数来批量处理。
from PIL import Image
try:
    img = Image.open("example.jpg").convert("RGB") # 确保是RGB模式,方便操作
    pixels = img.load() # 获取像素访问对象
    # 将图片每个像素的R通道值加50 (简单示例,可能导致溢出)
    # 注意:直接修改像素在Python中通常较慢,尤其对于大图
    for i in range(img.width):
        for j in range(img.height):
            r, g, b = pixels[i, j]
            pixels[i, j] = (min(r + 50, 255), g, b) # 避免R值超过255
    img.save("pixel_manipulated_example.jpg")
    print("图片已进行像素级操作。")
    # 更高效的像素级操作:使用point()方法
    # 比如,反转颜色 (255 - pixel_value)
    inverted_img = img.point(lambda p: 255 - p)
    inverted_img.save("inverted_example.jpg")
    print("图片已反转颜色。")
except FileNotFoundError:
    print("错误:example.jpg 文件未找到。")
except Exception as e:
    print(f"像素操作时发生错误: {e}")point()方法接收一个函数,这个函数会对图片每个通道的像素值进行操作,效率远高于手动遍历。这在进行一些简单的颜色调整或查找表(LUT)操作时非常有用。
Pillow库无疑是Python图像处理的佼佼者,但任何工具都有其适用范围和局限性。在我实际工作中,尤其是在处理超大尺寸图片(比如几亿像素的卫星图)或者需要极高性能的场景(比如实时视频流处理)时,Pillow的某些方面可能就显得力不从心了。
Pillow的局限性主要体现在:
那么,当Pillow遇到瓶颈时,我们有哪些替代方案或者辅助工具呢?
OpenCV (Open Source Computer Vision Library):
scikit-image:
NumPy (配合Pillow):
Image对象可以方便地与NumPy数组进行转换(np.array(img) 和 Image.fromarray(np_array))。这意味着你可以利用NumPy强大的数组操作能力进行高效的像素级处理,尤其是在进行颜色通道分离、数学运算、矩阵变换等方面。point()方法更灵活、更高效的控制时。总结一下我的看法:
Pillow是Python图像处理的绝佳起点,它简单易用,能够满足绝大部分日常需求。但如果你的项目涉及到:
那么,这时候就应该考虑引入OpenCV或scikit-image,甚至结合NumPy来发挥它们的专长。通常,我会在项目初期优先考虑Pillow,如果遇到性能瓶颈或者功能缺失,再逐步引入更专业的库,这样可以保持代码的简洁性和开发效率。
以上就是Python代码怎样进行图像处理 Python代码通过PIL库操作图片的示例的详细内容,更多请关注php中文网其它相关文章!
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号