通过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 strip()函数 介绍
May 24 Python
Python函数参数类型*、**的区别
Apr 11 Python
Python单元测试框架unittest使用方法讲解
Apr 13 Python
Python字符串特性及常用字符串方法的简单笔记
Jan 04 Python
flask中的wtforms使用方法
Jul 21 Python
详解Django-channels 实现WebSocket实例
Aug 22 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
Feb 14 Python
PyCharm 专业版安装图文教程
Feb 20 Python
python deque模块简单使用代码实例
Mar 12 Python
Python3 io文本及原始流I/O工具用法详解
Mar 23 Python
python如何实现图片压缩
Sep 11 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
Sep 30 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导入csv文件碰到乱码问题的解决方法
2014/02/10 PHP
浅谈php提交form表单
2015/07/01 PHP
Yii2基于Ajax自动获取表单数据的方法
2016/08/10 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
3Z版基于jquery的图片复选框(asp.net+jquery)
2010/04/12 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
JS实现的车标图片提示效果代码
2015/10/10 Javascript
Bootstrap表单布局样式代码
2016/05/31 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
Node.js 中exports 和 module.exports 的区别
2017/03/14 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
2017/07/07 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
JavaScript 装逼指南(js另类写法)
2020/05/10 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
2020/08/13 Javascript
[06:42]DOTA2每周TOP10 精彩击杀集锦vol.1
2014/06/25 DOTA
一道python走迷宫算法题
2018/01/22 Python
对python程序内存泄漏调试的记录
2018/06/11 Python
Python Pandas 如何shuffle(打乱)数据
2019/07/30 Python
python小项目之五子棋游戏
2019/12/26 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
曼城官方网上商店:Manchester City
2019/09/10 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
实习生单位鉴定意见
2013/12/04 职场文书
保安队长职务说明书
2014/02/23 职场文书
2015年读书月活动总结
2015/03/26 职场文书
高老头读书笔记
2015/06/30 职场文书
游戏《东方异文石:爱亚利亚黎明》正式版发布
2022/04/03 其他游戏
MySQL深分页问题解决思路
2022/12/24 MySQL