通过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 相关文章推荐
go和python调用其它程序并得到程序输出
Feb 10 Python
Python读取文件内容的三种常用方式及效率比较
Oct 07 Python
纯python实现机器学习之kNN算法示例
Mar 01 Python
浅谈pandas中shift和diff函数关系
Apr 08 Python
Python实现的维尼吉亚密码算法示例
Apr 12 Python
Python虚拟环境的原理及使用详解
Jul 02 Python
Django用户认证系统 组与权限解析
Aug 02 Python
Python 实现文件读写、坐标寻址、查找替换功能
Sep 11 Python
python 子类调用父类的构造函数实例
Mar 12 Python
Python requests模块cookie实例解析
Apr 14 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
Dec 01 Python
OpenCV-Python实现人脸美白算法的实例
Jun 11 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
PHP以及MYSQL日期比较方法
2012/11/29 PHP
PHP实现邮件群发的源码
2013/06/18 PHP
Yii统计不同类型邮箱数量的方法
2016/10/18 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
2019/06/19 PHP
javascript 拖放效果实现代码
2010/01/22 Javascript
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
2010/03/16 Javascript
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
MyEclipse取消验证Js的两种方法
2013/11/14 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
2014/04/20 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
2015/06/24 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
2016/08/17 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
微信小程序wx:for和wx:for-item的用法详解
2018/04/01 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
2018/06/28 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
vue.js实现照片放大功能
2020/06/23 Javascript
Python向日志输出中添加上下文信息
2017/05/24 Python
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
使用css3 属性如何丰富图片样式(圆角 阴影 渐变)
2012/11/22 HTML / CSS
Shell编程面试题
2012/05/30 面试题
恒华伟业笔试面试题
2015/02/26 面试题
简历的自我评价
2014/02/03 职场文书
给小学生的新年寄语
2014/04/04 职场文书
继承公证书样本
2014/04/04 职场文书
高温慰问简报
2015/07/21 职场文书
职工食堂管理制度
2015/08/06 职场文书
2016年国庆节宣传标语
2015/11/25 职场文书
2016开学第一课心得体会
2016/01/23 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
python flask开发的简单基金查询工具
2021/06/02 Python