通过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,图像,分割
0
投稿

猜你喜欢

  • Pytest实现setup和teardown的详细使用详解

    2023-09-12 02:06:48
  • Python实现灰色关联分析与结果可视化的详细代码

    2023-08-03 15:01:56
  • Python matplotlib实时画图案例

    2021-11-08 01:43:24
  • 在Vue项目中取消ESLint代码检测的步骤讲解

    2024-05-29 22:23:03
  • 清除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
  • Golang实现将视频按照时间维度剪切的工具

    2024-02-14 08:19:08
  • Golang中Interface接口的三个特性

    2024-04-23 09:35:46
  • 手把手教你Python yLab的绘制折线图的画法

    2023-03-11 21:21:43
  • 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
  • python+selenium 实现扫码免密登录示例代码

    2021-02-03 06:41:57
  • sqlserver 不重复的随机数

    2024-01-14 00:13:59
  • Tag的自定义类

    2010-03-18 15:53:00
  • JS实现点击表头表格自动排序(含数字、字符串、日期)

    2024-05-02 16:16:53
  • Hibernate Oracle sequence的使用技巧

    2009-06-19 17:25:00
  • asp之家 网络编程 m.aspxhome.com