通过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实现给字典添加条目的方法
Sep 25 Python
Python之Web框架Django项目搭建全过程
May 02 Python
python编写微信远程控制电脑的程序
Jan 05 Python
python调用OpenCV实现人脸识别功能
May 25 Python
Python自定义装饰器原理与用法实例分析
Jul 16 Python
python批量修改图片大小的方法
Jul 24 Python
Python中几种属性访问的区别与用法详解
Oct 10 Python
python使用knn实现特征向量分类
Dec 26 Python
Django url,从一个页面调到另个页面的方法
Aug 21 Python
python 实现人和电脑猜拳的示例代码
Mar 02 Python
python中列表的含义及用法
May 26 Python
Python实现随机生成迷宫并自动寻路
Jun 13 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
老照片 - 几十年前的收音机与人
2021/03/02 无线电
php实现上传图片文件代码
2015/07/19 PHP
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
js中eval详解
2012/03/30 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
jquery图片切换插件
2015/03/16 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
jq checkbox 的全选并ajax传参的实例
2017/04/01 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
vue通过style或者class改变样式的实例代码
2018/10/30 Javascript
Vue.js 父子组件通信的十种方式
2018/10/30 Javascript
node.js中express模块创建服务器和http模块客户端发请求
2019/03/06 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
javascript实现点亮灯泡特效示例
2019/10/15 Javascript
vue 解决文本框被键盘遮住的问题
2019/11/06 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
[26:21]浴火之凤-TI4世界冠军Newbee战队纪录片
2014/08/07 DOTA
[01:09]DOTA2次级职业联赛 - 99战队宣传片
2014/12/01 DOTA
Python群发邮件实例代码
2014/01/03 Python
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
Python彩色化Linux的命令行终端界面的代码实例分享
2016/07/02 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
2018/02/21 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
GANT英国官方网上商店:甘特衬衫
2018/02/06 全球购物
作为网站管理者应当如何防范XSS
2014/08/16 面试题
护士岗前培训自我评鉴
2014/02/28 职场文书
少儿节目主持串词
2014/04/02 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
小学教研工作总结2015
2015/05/13 职场文书
大学生村官入党自传
2015/06/26 职场文书
HTML基本元素标签介绍
2022/02/28 HTML / CSS
Pandas-DataFrame知识点汇总
2022/03/16 Python
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python
springcloud整合seata
2022/05/20 Java/Android