python凹多边形分割_使用Python生成不规则形状的图形

本文介绍如何使用Python和Pillow库生成边缘不规则的图形,并通过蒙板实现图形裁剪及添加阴影、描边等特效。
部署运行你感兴趣的模型镜像

借助 Python 以及强大的 Pillow ,我们可以生成各种边缘不规则的图形。

比如我们有一个原图:

想从它上面挖出一块不规则形状的图来。这个不规则形状可以有很多种,比如下面这样:

用 Python 代码,很容易就能实现这样的效果。

首先,我们要制作一张 蒙板 图,如下:

接着编写代码:

from PIL import Image

x, y = 160, 60

bg = Image.open('bg.jpg') # 背景图

mask = Image.open('mask.png') # 蒙板

mask_size = mask.size

crop = bg.crop((x, y, x + mask_size[0], y + mask_size[1]))

上面的代码将根据蒙板图的大小,从背景图上截取一块图,如下:

接着就到了最关键的一步:

m2 = Image.new('RGBA', mask.size)

m2.paste(crop, mask=mask)

注意 .paste() 方法的 mask 参数。上面两行表示创建一个新的空白透明图片,然后将刚才截取到的 crop 图片贴进来,贴的时候使用指定的蒙板图片。

这个过程如下所示:

到此,就实现了不规则图形的生成。

进一步,我们可以再给这个不规则图形添加特效,比如阴影、描边等。虽然 PIL 也可以做到,但最简单的方式似乎仍然是使用蒙板对图片进行叠加。

比如:

m3 = Image.new('RGBA', mask.size)

m3.paste(m2, mask=m2)

shadow = Image.open('shadow.png')

m3.paste(shadow, mask=shadow)

效果如下:

对应地,我们还可以给原图添加一个图片被挖走后的凹痕效果,方法是先制作一张对应的内阴影效果图:

然后与原背景图叠加:

您可能感兴趣的与本文相关的镜像

Qwen-Image

Qwen-Image

图片生成
Qwen

Qwen-Image是阿里云通义千问团队于2025年8月发布的亿参数图像生成基础模型,其最大亮点是强大的复杂文本渲染和精确图像编辑能力,能够生成包含多行、段落级中英文文本的高保真图像

### 使用Python绘制多边形图形 #### matplotlib库实现多边形绘制 对于二维空间中的多边形绘制,`matplotlib.pyplot`是一个强大的绘图工具。此库允许用户定义多边形的各个顶点坐标,并将其连接起来形成封闭或多段线形式的多边形[^1]。 ```python import matplotlib.pyplot as plt from matplotlib.patches import Polygon fig, ax = plt.subplots() polygon = Polygon([(0.2, 0.2), (0.8, 0.2), (0.5, 0.9)], True) ax.add_patch(polygon) plt.xlim(0, 1) plt.ylim(0, 1) plt.show() ``` #### PIL库下的ImageDraw模块绘制多边形 当目标是在图片上添加多边形图案时,可以采用PIL(即Pillow)库里的`ImageDraw.Draw.polygon()`方法,在指定位置按照给定参数描绘所需形状[^3]。 ```python from PIL import Image, ImageDraw img = Image.new('RGB', (200, 200)) draw = ImageDraw.Draw(img) draw.polygon(((50, 50), (150, 50), (150, 150), (50, 150)), fill="red") img.show() ``` #### turtle库简易绘制多边形 `turtle`库适合初学者学习编程逻辑的同时练习基础图形学概念;通过设置方向角与步长即可完成简单规则图形如正n边形等结构构建[^4]。 ```python import turtle screen = turtle.Screen() pen = turtle.Turtle() sides = int(input("Enter number of sides: ")) length = int(input("Enter length of each side: ")) for _ in range(sides): pen.forward(length) pen.right(360 / sides) screen.mainloop() ``` #### OpenCV库用于复杂场景下多边形操作 针对计算机视觉应用场景,则推荐利用OpenCV库来进行更复杂的图像处理任务,比如基于像素级别的精确控制来创建任意形态的不规则多边形轮廓[^5]。 ```python import cv2 import numpy as np image = np.zeros((400, 400, 3), dtype=np.uint8) points = np.array([[100, 200], [200, 100], [300, 200], [250, 300], [150, 300]], np.int32) cv2.polylines(image, [points], isClosed=True, color=(255, 0, 0), thickness=3) cv2.imshow("Polygon", image) cv2.waitKey(0) cv2.destroyAllWindows() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值