You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过圆形裁剪Matplotlib图像?能否仅用Matplotlib实现?

仅用Matplotlib实现图像圆形裁剪的解决方案

你的代码报错是因为将浮点型的单通道数据(Z)与uint8类型的alpha通道堆叠后,形成了(10,10,2)的float数组,PIL不支持这种非标准的图像格式,因此抛出类型错误。

以下是两种仅依赖Matplotlib的圆形裁剪实现方式:

方法一:通过alpha蒙版实现圆形透明裁剪

生成圆形蒙版数组,在imshow时传入alpha参数,让圆形外的区域透明:

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(100)
Z = np.random.rand(10, 10)

fig, ax = plt.subplots()

# 生成圆形蒙版
h, w = Z.shape
y, x = np.mgrid[:h, :w]
center_y, center_x = h//2, w//2
radius = min(h, w) // 2
# 计算每个像素到中心的距离,筛选出圆形区域内的像素
mask = ((x - center_x)**2 + (y - center_y)**2) <= radius**2

# 绘制图像并应用蒙版
ax.imshow(Z, alpha=mask.astype(float))

plt.show()

方法二:通过clip_path实现物理裁剪

创建圆形补丁作为裁剪路径,让图像仅显示圆形区域内的内容:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Circle

np.random.seed(100)
Z = np.random.rand(10, 10)

fig, ax = plt.subplots()

# 绘制原始图像
im = ax.imshow(Z)

# 创建圆形裁剪路径
h, w = Z.shape
center = (w//2, h//2)
radius = min(h, w) // 2
circle = Circle(center, radius, transform=ax.transData)

# 为图像设置裁剪路径
im.set_clip_path(circle)

plt.show()

内容的提问来源于stack exchange,提问作者zxdawn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 08:47:31