杰瑞科技汇

Python graphics图片如何高效生成与处理?

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

Python graphics图片如何高效生成与处理?-图1
(图片来源网络,侵删)

核心概念区分

在开始之前,我们先简单区分两个概念:

  • 绘图: 指的是从零开始创建图形,比如绘制几何图形(线、圆、矩形)、数据图表(折线图、柱状图)、函数图像等,我们关注的是形状、线条、颜色和布局
  • 图片处理: 指的是对已有的图片文件(如 .jpg, .png)进行操作,比如读取、修改像素、调整大小、滤镜、图像识别等,我们关注的是像素数据、颜色通道和图像信息

很多库(如 Pillow)也兼具创建和修改图片的能力。


主要图形和图片库推荐

以下是几个最流行和最核心的库,您可以根据需求选择:

库名称 主要用途 难度 特点
Matplotlib 数据绘图、函数图像 ★☆☆☆☆ Python 数据科学“三巨头”之一,功能强大,API 丰富,适合创建高质量的图表。
Pillow (PIL) 图片处理、图片基本操作 ★☆☆☆☆ Python 图像处理的“标准库”,是 PIL 的一个分支,非常易于使用,适合日常的图片操作。
OpenCV 计算机视觉、高级图像处理 ★★★☆☆ 功能极其强大的计算机视觉库,专注于实时图像和视频处理,性能高。
Pygame 游戏开发、交互式图形 ★★☆☆☆ 专门为游戏设计的库,提供了对图形、声音、鼠标/键盘事件的简单接口。
Seaborn 统计图表 ★★☆☆☆ 基于 Matplotlib,提供了更美观、更高级的统计图表接口,代码更简洁。

各库详细教程与示例

A. Matplotlib - 数据绘图之王

Matplotlib 是 Python 数据可视化的基石,几乎所有其他的可视化库(包括 Seaborn)都是基于它构建的。

Python graphics图片如何高效生成与处理?-图2
(图片来源网络,侵删)

安装:

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: 绘制散点图

Python graphics图片如何高效生成与处理?-图3
(图片来源网络,侵删)
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 图形和图片处理库!

分享:
扫描分享到社交APP
上一篇
下一篇