首页 > 编程 > Python > 正文

通过PYTHON来实现图像分割详解

2019-11-25 12:38:14
字体:
来源:转载
供稿:网友

程序思路:

此次程序主要是利用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 Imageimport 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_imagedef 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 += 1if __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库的使用

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表