通过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 中的匿名函数
May 21 Python
Python OpenCV处理图像之图像直方图和反向投影
Jul 10 Python
python实现事件驱动
Nov 21 Python
pycharm设置鼠标悬停查看方法设置
Jul 29 Python
基于python cut和qcut的用法及区别详解
Nov 22 Python
python绘制雪景图
Dec 16 Python
python实现将中文日期转换为数字日期
Jul 14 Python
Django中ORM的基本使用教程
Dec 22 Python
详解python的变量缓存机制
Jan 24 Python
解决Tkinter中button按钮未按却主动执行command函数的问题
May 23 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 Python
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Jun 08 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
模仿OSO的论坛(二)
2006/10/09 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
php数组编码转换示例详解
2014/03/11 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
javascript 写类方式之一
2009/07/05 Javascript
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
2015/09/15 Javascript
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
老生常谈JavaScript 正则表达式语法
2016/08/20 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
javascript循环链表之约瑟夫环的实现方法
2017/01/16 Javascript
详解使用angular-cli发布i18n多国语言Angular应用
2017/05/20 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
jQuery实现容器间的元素拖拽功能
2020/12/01 jQuery
[57:55]EG vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
keras 自定义loss model.add_loss的使用详解
2020/06/22 Python
简述python&pytorch 随机种子的实现
2020/10/07 Python
使用CSS3来代替JS实现交互
2017/08/10 HTML / CSS
英国最大的独立家具零售商:Furniture Village
2016/09/06 全球购物
英国豪华家具和经典家居饰品购物网站:OKA
2020/06/05 全球购物
中科软测试工程师面试题
2012/06/16 面试题
仓库组长岗位职责
2014/01/29 职场文书
仓库规划计划书
2014/04/28 职场文书
励志演讲稿500字
2014/08/21 职场文书
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
妇联2016年六一国际儿童节活动总结
2016/04/06 职场文书
基于Python实现一个春节倒计时脚本
2022/01/22 Python