开发知识

Python 处理图片的十个库

来源: 测试开发学习交流  日期:2024-04-29 20:47:15  点击:15  属于:开发知识

Matplotlib

类型: 数据可视化库

功能: 创建线图、柱状图、散点图、直方图、饼图等多种静态图表,支持子图布局、色彩映射、图例、注解等高级定制。

适用场景: 科研论文、报告、数据分析展示。

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)
plt.figure(figsize=(8, 6))
plt.plot(x, y)
plt.title('Sine of Squared X')
plt.xlabel('X', fontsize=14)
plt.ylabel('Y', fontsize=14)
plt.grid(True)
plt.show()

PIL/Pillow

类型: 图像处理库

功能: 打开、修改、保存多种格式的图像文件,支持像素级操作、裁剪、旋转、缩放、颜色空间转换、滤镜应用等。

适用场景: 基本图像编辑、批处理、Web开发中的图像预处理。

from PIL import Image, ImageDraw, ImageFont
# 创建一个空白图像
img = Image.new('RGB', (500, 300), color='white')
# 创建绘图对象
draw = ImageDraw.Draw(img)
# 写入文字
font = ImageFont.truetype('arial.ttf', size=50)
text = "Hello, World!"
text_width, text_height = font.getsize(text)
draw.text((img.width // 2 - text_width // 2, img.height // 2 - text_height // 2), text=text, fill='black', fnotallow=font)
# 保存图像
img.save('hello_world.png')

字体下载链接:https://font.chinaz.com/120308013581.htm

NumPy

类型: 数值计算库

功能: 提供高效的多维数组对象(ndarray),是处理图像数据的基础。图像通常被表示为NumPy数组,便于进行数学运算和算法处理。

适用场景: 图像数据的基本操作、与图像处理库配合使用。

import numpy as np
import matplotlib.pyplot as plt
# 创建一个5x5的随机数组
img_array = np.random.randint(0, 256, size=(5, 5), dtype=np.uint8)
# 显示数组作为灰度图像
plt.imshow(img_array, cmap='gray')
plt.colorbar()
plt.title('Random 5x5 Image Array')
plt.show()

scikit-image (skimage)

类型: 计算机视觉库

功能: 提供大量图像处理算法,包括滤波、边缘检测、形态学操作、图像分割、特征提取、色彩空间转换等。

适用场景: 学术研究、工业应用中的图像分析与处理。

from skimage import io
from skimage.filters import sobel
from matplotlib import pyplot as plt


# 读取图像
image = io.imread('example.jpg', as_gray=True)# 替换成需要处理的图片
# 应用 Sobel 边缘检测
edges = sobel(image)
# 显示原图和边缘检测结果
fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(10, 5))
ax[0].imshow(image, cmap='gray')
ax[0].set_title('Original Image')
ax[1].imshow(edges, cmap='gray')
ax[1].set_title('Sobel Edge Detection')
plt.tight_layout()
plt.show()

OpenCV

类型: 计算机视觉库

功能: 高性能的图像与视频处理、物体检测与识别、跟踪、立体视觉、机器学习算法等。

适用场景: 实时视频处理、复杂图像分析、深度学习应用。

import cv2
import numpy as np
# 读取图像
image = cv2.imread('example.jpg')
# 转为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 应用Canny边缘检测
edges = cv2.Canny(gray, threshold1=100, threshold2=200)
# 显示原图和边缘检测结果
cv2.imshow('Original Image', image)
cv2.imshow('Canny Edge Detection', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

Seaborn

类型: 数据可视化库(基于Matplotlib)

功能: 提供更美观、更高级的数据可视化接口,专注于统计图形,如热图、箱线图、小提琴图、联合分布图等。

适用场景: 数据探索性分析、统计报告、交互式可视化。

import seaborn as sns
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt


# 创建模拟数据
data = pd.DataFrame({'x': np.random.normal(size=100),
                     'y': np.random.normal(size=100),
                     'class': np.repeat(['A', 'B'], 50)})
# 绘制散点图并按类别着色
sns.scatterplot(data=data, x='x', y='y', hue='class', palette=['red', 'blue'])
plt.title('Seaborn Scatterplot with Class Coloring')
plt.show()

Plotly

类型: 数据可视化库

功能: 创建交互式图表,支持Web浏览器展示,包括2D/3D图表、地图、仪表盘等,可导出为HTML或嵌入到Web应用程序中。

适用场景: Web应用的数据可视化、在线报告、动态交互式图表。

import plotly.graph_objs as go
import numpy as np
# 创建数据
t = np.linspace(0, 2 * np.pi, 100)
x = np.cos(t)
y = np.sin(t)
# 构建 Plotly 图表对象
fig = go.Figure(data=[go.Scatter(x=t, y=x, name='Cosine'),
                       go.Scatter(x=t, y=y, name='Sine')])
# 设置图表属性
fig.update_layout(title='Plotly Interactive Plot',
                  xaxis_title='Time',
                  yaxis_title='Value')
# 显示图表
fig.show()

Bokeh

类型: 数据可视化库

功能: 制作高性能交互式图表,支持大型数据集,输出为HTML,可在现代Web浏览器中展示,提供丰富的用户交互和实时更新能力。

适用场景: 大数据可视化、Web应用程序中的实时数据流展示、仪表盘构建。

from bokeh.plotting import figure, show
from bokeh.io import output_notebook
import numpy as np
output_notebook()
t = np.linspace(0, 2*np.pi, ¼00)
x = np.cos(t)
y = np.sin(t)
p = figure(title="Bokeh Interactive Plot", plot_width=600, plot_height=400)
p.line(t, x, legend_label="cosine", line_width=2)
p.line(t, y, legend_label="sine", line_color="orange", line_width=2)
show(p)

Pycairo

类型: 矢量图形库绑定

功能: 通过Python接口调用Cairo库进行矢量图形绘制,支持SVG、PDF、PostScript等格式输出,保持图像无损缩放。

适用场景: 创建高质量的矢量图形、图标设计、打印出版物。

import cairo
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
ctx = cairo.Context(surface)
ctx.set_source_rgb(1, 1, 1)  # Set background color to white
ctx.rectangle(0, 0, surface.get_width(), surface.get_height())
ctx.fill()
ctx.set_source_rgb(0, 0, 0)  # Set drawing color to black
ctx.select_font_face("Sans")
ctx.set_font_size(32)
ctx.move_to(50, ½0)
ctx.show_text("Hello, Pycairo!")
surface.write_to_png('hello_pycairo.png')

SimpleCV

类型: 计算机视觉库(封装了OpenCV、PIL、NumPy)

功能: 提供易用的API,简化计算机视觉任务,如图像获取、预处理、特征检测、物体识别等。

适用场景: 初学者快速上手计算机视觉项目、教育和原型开发

from SimpleCV import Camera, Display
# 初始化摄像头
cam = Camera()
# 创建显示窗口
disp = Display()
while True:
    # 获取一帧图像
    img = cam.getImage()
    # 对图像进行灰度处理
    gray_img = img.grayscale()
    # 在窗口中显示图像
    gray_img.show(disp)
    # 检查是否有按键事件(如'q'键按下退出循环)
    if disp.isDone():
        break
disp.destroy()