通过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的urllib和urllib2模块制作爬虫的实例教程
Jan 20 Python
使用Python的Tornado框架实现一个Web端图书展示页面
Jul 11 Python
关于Python中Inf与Nan的判断问题详解
Feb 08 Python
一道python走迷宫算法题
Jan 22 Python
Django使用httpresponse返回用户头像实例代码
Jan 26 Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 Python
Python3.7中安装openCV库的方法
Jul 11 Python
对Python中实现两个数的值交换的集中方法详解
Jan 11 Python
详解python播放音频的三种方法
Sep 23 Python
opencv python Canny边缘提取实现过程解析
Feb 03 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 Python
Django和Ueditor自定义存储上传文件的文件名
Feb 25 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
apache和PHP如何整合在一起
2015/10/12 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
2016/06/13 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
Python的subprocess模块总结
2014/11/07 Python
python 接口返回的json字符串实例
2018/03/27 Python
在Pycharm中修改文件默认打开方式的方法
2019/01/17 Python
详解爬虫被封的问题
2019/04/23 Python
Python函数和模块的使用总结
2019/05/20 Python
利用python计算时间差(返回天数)
2019/09/07 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
计算机专业毕业生自荐信范文
2014/03/06 职场文书
优秀少先队工作者事迹材料
2014/05/13 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
小升初自荐信范文
2015/03/05 职场文书
法制工作总结2015
2015/07/23 职场文书
2015年国庆节寄语
2015/08/17 职场文书
学法用法心得体会(2016推荐篇)
2016/01/21 职场文书
Python使用psutil库对系统数据进行采集监控的方法
2021/08/23 Python
mysql如何查询连续记录
2022/05/11 MySQL
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL