通过PYTHON来实现图像分割详解
作者:白包子 时间:2023-12-08 16:02:46
程序思路:
此次程序主要是利用PIL(Python Image Libraty)这库,来进行图片的处理。
PIL是一个功能非常强大的python图像处理标准库,但由于PIL只支持python2.7。如今很多python程序员都使用python3.x,所以PIL在之前的基础上分离出来一个分支,另外创建一个Pillow库,以便支持python3.x, 本程序在使用之前确保已经安装了Pillow库。
程序首先把你要分隔的图像读取到一个变量中,然后我们定义了一个 fill_image() 方法,用来填充图像让原本大小不一的图像,重新变为一个长宽相同的正方形图像,方便之后处理。
通过 fill_image() 方法,我们就会得到新的一张正方形图像。随后我们在利用 cut_image() 方法,把图像分隔成 9 张,因为微信朋友圈最多发 9张图片。
from PIL import Image
import sys
#先将 input image 填充为正方形
def fill_image(image):
width, height = image.size
#选取长和宽中较大值作为新图片的
new_image_length = width if width > height else height
#生成新图片[白底]
new_image = Image.new(image.mode, (new_image_length, new_image_length), color='white') #注意这个函数!
#将之前的图粘贴在新图上,居中
if width > height:#原图宽大于高,则填充图片的竖直维度 #(x,y)二元组表示粘贴上图相对下图的起始位置,是个坐标点。
new_image.paste(image, (0, int((new_image_length - height) / 2)))
else:
new_image.paste(image, (int((new_image_length - width) / 2),0))
return new_image
def cut_image(image):
width, height = image.size
item_width = int(width / 3) #因为朋友圈一行放3张图。
box_list = []
# (left, upper, right, lower)
for i in range(0,3):
for j in range(0,3):
#print((i*item_width,j*item_width,(i+1)*item_width,(j+1)*item_width))
box = (j*item_width,i*item_width,(j+1)*item_width,(i+1)*item_width)
box_list.append(box)
image_list = [image.crop(box) for box in box_list]
return image_list
#保存
def save_images(image_list):
index = 1
for image in image_list:
image.save(str(index) + '.png', 'PNG')
index += 1
if __name__ == '__main__':
file_path = "2.jpg" #图片保存的地址
image = Image.open(file_path)
#image.show()
image_new = fill_image(image)
image_list = cut_image(image_new)
save_images(image_list)
如果有兴趣的话可以看一看Pillow库的使用
来源:https://www.cnblogs.com/tianqianlan/p/9448852.html
标签:python,图像,分割
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Pytest实现setup和teardown的详细使用详解
2023-09-12 02:06:48
![](https://img.aspxhome.com/file/2023/6/78596_0s.jpg)
Python实现灰色关联分析与结果可视化的详细代码
2023-08-03 15:01:56
![](https://img.aspxhome.com/file/2023/3/61703_0s.png)
Python matplotlib实时画图案例
2021-11-08 01:43:24
![](https://img.aspxhome.com/file/2023/1/124111_0s.gif)
在Vue项目中取消ESLint代码检测的步骤讲解
2024-05-29 22:23:03
![](https://img.aspxhome.com/file/2023/3/123173_0s.png)
清除SQL被注入恶意病毒代码的语句
2010-03-03 09:59:00
python获取代码运行时间的实例代码
2023-11-04 02:25:10
php文件缓存类用法实例分析
2023-08-17 16:26:44
Vue如何获取url路由地址和参数简单示例
2024-05-09 09:53:08
![](https://img.aspxhome.com/file/2023/4/127164_0s.png)
Golang实现将视频按照时间维度剪切的工具
2024-02-14 08:19:08
![](https://img.aspxhome.com/file/2023/6/112206_0s.png)
Golang中Interface接口的三个特性
2024-04-23 09:35:46
手把手教你Python yLab的绘制折线图的画法
2023-03-11 21:21:43
![](https://img.aspxhome.com/file/2023/7/112587_0s.png)
php模板引擎技术简单实现
2023-11-14 13:28:37
php5.3 不支持 session_register() 此函数已启用的解决方法
2023-11-16 01:59:39
YUI3新特性学习
2012-04-26 16:25:20
python中pandas输出完整、对齐的表格的方法
2021-03-31 11:13:46
![](https://img.aspxhome.com/file/2023/3/121753_0s.png)
python+selenium 实现扫码免密登录示例代码
2021-02-03 06:41:57
sqlserver 不重复的随机数
2024-01-14 00:13:59
![](https://img.aspxhome.com/file/2023/5/110115_0s.jpg)
Tag的自定义类
2010-03-18 15:53:00
JS实现点击表头表格自动排序(含数字、字符串、日期)
2024-05-02 16:16:53
![](https://img.aspxhome.com/file/2023/4/132714_0s.png)
Hibernate Oracle sequence的使用技巧
2009-06-19 17:25:00