下面我将为您详细介绍几个主流的 Python 图形和图片处理库,并附上清晰的示例代码,帮助您快速上手。

核心概念区分
在开始之前,我们先简单区分两个概念:
- 绘图: 指的是从零开始创建图形,比如绘制几何图形(线、圆、矩形)、数据图表(折线图、柱状图)、函数图像等,我们关注的是形状、线条、颜色和布局。
- 图片处理: 指的是对已有的图片文件(如 .jpg, .png)进行操作,比如读取、修改像素、调整大小、滤镜、图像识别等,我们关注的是像素数据、颜色通道和图像信息。
很多库(如 Pillow)也兼具创建和修改图片的能力。
主要图形和图片库推荐
以下是几个最流行和最核心的库,您可以根据需求选择:
| 库名称 | 主要用途 | 难度 | 特点 |
|---|---|---|---|
| Matplotlib | 数据绘图、函数图像 | ★☆☆☆☆ | Python 数据科学“三巨头”之一,功能强大,API 丰富,适合创建高质量的图表。 |
| Pillow (PIL) | 图片处理、图片基本操作 | ★☆☆☆☆ | Python 图像处理的“标准库”,是 PIL 的一个分支,非常易于使用,适合日常的图片操作。 |
| OpenCV | 计算机视觉、高级图像处理 | ★★★☆☆ | 功能极其强大的计算机视觉库,专注于实时图像和视频处理,性能高。 |
| Pygame | 游戏开发、交互式图形 | ★★☆☆☆ | 专门为游戏设计的库,提供了对图形、声音、鼠标/键盘事件的简单接口。 |
| Seaborn | 统计图表 | ★★☆☆☆ | 基于 Matplotlib,提供了更美观、更高级的统计图表接口,代码更简洁。 |
各库详细教程与示例
A. Matplotlib - 数据绘图之王
Matplotlib 是 Python 数据可视化的基石,几乎所有其他的可视化库(包括 Seaborn)都是基于它构建的。

安装:
pip install matplotlib
示例 1: 绘制简单的折线图
import matplotlib.pyplot as plt
import numpy as np
# 1. 准备数据
x = np.linspace(0, 10, 100) # 生成 0 到 10 之间的 100 个点
y = np.sin(x) # 计算 x 的正弦值
# 2. 创建图形和坐标轴
plt.figure(figsize=(8, 5)) # 创建一个 8x5 英寸的画布
plt.plot(x, y, label='sin(x)', color='blue', linestyle='--') # 绘制折线图
# 3. 添加图表元素"Sine Wave") # 标题
plt.xlabel("X-axis") # X 轴标签
plt.ylabel("Y-axis") # Y 轴标签
plt.grid(True) # 显示网格
plt.legend() # 显示图例
# 4. 显示或保存图像
plt.show() # 在窗口中显示
# plt.savefig("sine_wave.png") # 保存为 PNG 文件
运行结果: 一个显示正弦波的窗口。
示例 2: 绘制散点图

import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(0)
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50)
sizes = 1000 * np.random.rand(50) # 点的大小
# 绘制散点图
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='viridis')
"Random Scatter Plot")
plt.xlabel("X values")
plt.ylabel("Y values")
plt.colorbar() # 显示颜色条
plt.show()
运行结果: 一个彩色的、点大小不一的散点图。
B. Pillow (PIL) - 图片处理标准库
Pillow 是处理图片文件最简单、最直接的方式,它让你可以轻松地打开、修改、保存各种格式的图片。
安装:
pip install Pillow
示例 1: 打开、显示和保存图片
from PIL import Image
try:
# 1. 打开一张图片 (请确保你有一张名为 'my_image.jpg' 的图片在同目录下)
img = Image.open('my_image.jpg')
# 2. 显示图片 (会调用系统的默认图片查看器)
img.show()
# 3. 获取图片信息
print(f"图片格式: {img.format}")
print(f"图片尺寸: {img.size}")
print(f"图片模式: {img.mode}") # 如 'RGB', 'L' (灰度), 'RGBA'
# 4. 保存图片 (可以另存为不同格式)
img.save('converted_image.png')
print("图片已另存为 PNG 格式。")
except FileNotFoundError:
print("错误:请确保 'my_image.jpg' 文件存在于当前目录。")
示例 2: 图片基本操作 (裁剪、调整大小、旋转)
from PIL import Image
# 假设我们有一张图片 'my_image.jpg'
img = Image.open('my_image.jpg')
# 1. 裁剪图片
# crop() 的参数是一个元组 (left, top, right, bottom)
cropped_img = img.crop((100, 100, 400, 400))
# cropped_img.show()
# 2. 调整大小
# 使用 Image.Resampling.LANCZOS 进行高质量缩放
resized_img = img.resize((300, 200), Image.Resampling.LANCZOS)
# resized_img.show()
# 3. 旋转图片
rotated_img = img.rotate(45) # 逆时针旋转 45 度
# rotated_img.show()
# 4. 转换为灰度图
gray_img = img.convert('L')
# gray_img.show()
# 将所有操作后的图片拼接并显示
cropped_img.save('cropped.jpg')
resized_img.save('resized.jpg')
rotated_img.save('rotated.jpg')
gray_img.save('gray.jpg')
print("所有操作后的图片已保存。")
C. OpenCV - 计算机视觉利器
OpenCV 是专业领域的首选,尤其在实时视频处理和图像识别方面无与伦比,它的安装和基本用法与 Pillow 略有不同。
安装:
pip install opencv-python
重要提示: OpenCV 读取图片的默认颜色通道是 BGR (蓝、绿、红),而 Matplotlib 和 Pillow 使用的是 RGB (红、绿、蓝),在使用 OpenCV 和 Matplotlib 显示同一张图片时,需要进行颜色通道转换。
示例 1: 读取、显示和保存图片
import cv2
import matplotlib.pyplot as plt
# 1. 读取图片 (OpenCV 默认以 BGR 格式读取)
img_bgr = cv2.imread('my_image.jpg')
if img_bgr is None:
print("错误:请确保 'my_image.jpg' 文件存在。")
else:
# 2. 显示图片 (使用 OpenCV 自带窗口)
cv2.imshow('BGR Image', img_bgr)
cv2.waitKey(0) # 等待任意按键
cv2.destroyAllWindows() # 关闭所有窗口
# 3. 将 BGR 转换为 RGB 以便用 Matplotlib 正确显示
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
# 4. 使用 Matplotlib 显示图片
plt.imshow(img_rgb)
plt.title('Image displayed with Matplotlib (RGB)')
plt.axis('off') # 关闭坐标轴
plt.show()
# 5. 保存图片 (OpenCV 会自动根据扩展名选择格式)
cv2.imwrite('opencv_output.jpg', img_bgr)
print("图片已用 OpenCV 保存。")
示例 2: 边缘检测 (一个简单的计算机视觉应用)
import cv2
import numpy as np
# 读取图片并转为灰度
img = cv2.imread('my_image.jpg', cv2.IMREAD_GRAYSCALE)
# 使用 Canny 算子进行边缘检测
# 100 和 200 是阈值,可以根据需要调整
edges = cv2.Canny(img, 100, 200)
# 显示原图和边缘检测结果
cv2.imshow('Original Image', img)
cv2.imshow('Edge Detection', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果: 两个窗口,一个是原图,一个是检测出的黑白边缘。
D. Pygame - 游戏与交互式图形
Pygame 让创建窗口、绘制图形和处理用户输入变得非常简单。
安装:
pip install pygame
示例: 创建一个窗口并绘制一个移动的方块
import pygame
import sys
# 1. 初始化 Pygame
pygame.init()
# 2. 设置窗口
screen_width, screen_height = 800, 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Pygame Example")
# 3. 定义颜色 (RGB)
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
RED = (255, 0, 0)
# 4. 方块的初始位置和速度
rect_x = 50
rect_y = 50
rect_speed_x = 2
rect_speed_y = 2
rect_size = 50
# 5. 游戏主循环
running = True
clock = pygame.time.Clock() # 用于控制帧率
while running:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT: # 如果点击关闭按钮
running = False
# 更新方块位置
rect_x += rect_speed_x
rect_y += rect_speed_y
# 边界检测,让方块反弹
if rect_x <= 0 or rect_x + rect_size >= screen_width:
rect_speed_x *= -1
if rect_y <= 0 or rect_y + rect_size >= screen_height:
rect_speed_y *= -1
# 6. 绘制
# 用白色填充屏幕
screen.fill(WHITE)
# 绘制蓝色方块
pygame.draw.rect(screen, BLUE, (rect_x, rect_y, rect_size, rect_size))
# 绘制一个静态的红色圆形
pygame.draw.circle(screen, RED, (screen_width // 2, screen_height // 2), 40)
# 7. 更新显示
pygame.display.flip()
# 控制帧率为 60 FPS
clock.tick(60)
# 8. 退出 Pygame
pygame.quit()
sys.exit()
运行结果: 一个窗口,里面有一个蓝色方块在屏幕上弹跳,中间有一个红色圆形。
总结与选择建议
- 如果你只想画数据图表、函数曲线:Matplotlib 是你的不二之选,如果图表需要更美观,可以试试 Seaborn。
- 如果你只是想对图片进行简单的裁剪、缩放、格式转换:Pillow 是最简单、最直接的选择。
- 如果你在做与计算机视觉相关的项目,如人脸识别、物体检测、视频分析:OpenCV 是行业标准,必须掌握。
- 如果你在开发一个 2D 游戏,或者需要创建一个可以响应用户鼠标/键盘输入的交互式图形界面:Pygame 是最佳起点。
希望这份详细的指南能帮助你找到适合你需求的 Python 图形和图片处理库!
