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


Posted in Python onJune 26, 2019

程序思路:

此次程序主要是利用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库的使用

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中反射用法实例
Mar 27 Python
Python中使用gzip模块压缩文件的简单教程
Apr 08 Python
Python正则表达式匹配中文用法示例
Jan 17 Python
Python使用迭代器捕获Generator返回值的方法
Apr 05 Python
python中使用iterrows()对dataframe进行遍历的实例
Jun 09 Python
Python简单爬虫导出CSV文件的实例讲解
Jul 06 Python
python查看模块,对象的函数方法
Oct 16 Python
python自动化测试无法启动谷歌浏览器问题
Oct 10 Python
Python3操作MongoDB增册改查等方法详解
Feb 10 Python
Jupyter加载文件的实现方法
Apr 14 Python
python xlsxwriter模块的使用
Dec 24 Python
python批量更改目录名/文件名的方法
Apr 18 Python
Flask模板引擎之Jinja2语法介绍
Jun 26 #Python
如何使用Python实现自动化水军评论
Jun 26 #Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 #Python
Python 数据可视化pyecharts的使用详解
Jun 26 #Python
python 实现交换两个列表元素的位置示例
Jun 26 #Python
python之信息加密题目详解
Jun 26 #Python
实例详解Python模块decimal
Jun 26 #Python
You might like
模拟xcopy的函数
2006/10/09 PHP
用PHP编程开发“虚拟域名”系统
2006/10/09 PHP
PHP程序员编程注意事项
2008/04/10 PHP
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
IE/FireFox具备兼容性的拖动代码
2007/08/13 Javascript
Jquery加载时从后台读取数据绑定到dropdownList实例
2013/06/09 Javascript
node.js中的http.response.addTrailers方法使用说明
2014/12/14 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
JS动态加载脚本并执行回调操作
2016/08/24 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
2017/09/20 Javascript
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
教你使用vue-cli快速构建的小说阅读器
2019/05/13 Javascript
Python画图学习入门教程
2016/07/01 Python
python抓取文件夹的所有文件
2018/02/27 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
Python二叉树定义与遍历方法实例分析
2018/05/25 Python
Python格式化日期时间操作示例
2018/06/28 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
python3 mmh3安装及使用方法
2019/10/09 Python
flask开启多线程的具体方法
2020/08/02 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
python绘制雷达图实例讲解
2021/01/03 Python
学生个人的自我评价分享
2013/11/05 职场文书
超市中秋节活动方案
2014/02/12 职场文书
优秀员工演讲稿
2014/05/19 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
幼儿园教研工作总结2015
2015/05/12 职场文书
感恩老师主题班会
2015/08/12 职场文书
2019班干部竞选演讲稿范本!
2019/07/08 职场文书
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android