python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图


Posted in Python onAugust 04, 2020

因为最近在做深度学习抠图,正好要用到蒙版进行抠图,所以我将抠图代码进行了封装注释,可以直接使用。可能走了弯路,若有高见请一定提出!

主要代码

import cv2
from PIL import Image
import numpy as np


class UnsupportedFormat(Exception):
 def __init__(self, input_type):
  self.t = input_type

 def __str__(self):
  return "不支持'{}'模式的转换,请使用为图片地址(path)、PIL.Image(pil)或OpenCV(cv2)模式".format(self.t)


class MatteMatting():
 def __init__(self, original_graph, mask_graph, input_type='path'):
  """
  将输入的图片经过蒙版转化为透明图构造函数
  :param original_graph:输入的图片地址、PIL格式、CV2格式
  :param mask_graph:蒙版的图片地址、PIL格式、CV2格式
  :param input_type:输入的类型,有path:图片地址、pil:pil类型、cv2类型
  """
  if input_type == 'path':
   self.img1 = cv2.imread(original_graph)
   self.img2 = cv2.imread(mask_graph)
  elif input_type == 'pil':
   self.img1 = self.__image_to_opencv(original_graph)
   self.img2 = self.__image_to_opencv(mask_graph)
  elif input_type == 'cv2':
   self.img1 = original_graph
   self.img2 = mask_graph
  else:
   raise UnsupportedFormat(input_type)

 @staticmethod
 def __transparent_back(img):
  """
  :param img: 传入图片地址
  :return: 返回替换白色后的透明图
  """
  img = img.convert('RGBA')
  L, H = img.size
  color_0 = (255, 255, 255, 255) # 要替换的颜色
  for h in range(H):
   for l in range(L):
    dot = (l, h)
    color_1 = img.getpixel(dot)
    if color_1 == color_0:
     color_1 = color_1[:-1] + (0,)
     img.putpixel(dot, color_1)
  return img

 def save_image(self, path, mask_flip=False):
  """
  用于保存透明图
  :param path: 保存位置
  :param mask_flip: 蒙版翻转,将蒙版的黑白颜色翻转;True翻转;False不使用翻转
  """
  if mask_flip:
   img2 = cv2.bitwise_not(self.img2) # 黑白翻转
  image = cv2.add(self.img1, img2)
  image = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) # OpenCV转换成PIL.Image格式
  img = self.__transparent_back(image)
  img.save(path)

 @staticmethod
 def __image_to_opencv(image):
  """
  PIL.Image转换成OpenCV格式
  """
  img = cv2.cvtColor(np.asarray(image), cv2.COLOR_RGB2BGR)
  return img

使用示例

mm = MatteMatting("input.jpg", "mask.jpg")
mm.save_image("output.png", mask_flip=True) # mask_flip是指蒙版翻转,即把白色的变成黑色的,黑色的变成白色的

效果展示

input.jpg

python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图

mask.jpg

python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图

output.png

python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图

到此这篇关于python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图的文章就介绍到这了,更多相关python 输出透明背景图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用Python的Tornado框架实现一个一对一聊天的程序
Apr 25 Python
Python中利用sqrt()方法进行平方根计算的教程
May 15 Python
python Matplotlib画图之调整字体大小的示例
Nov 20 Python
python3.6连接MySQL和表的创建与删除实例代码
Dec 28 Python
Django跨域请求问题的解决方法示例
Jun 16 Python
Python实现快速傅里叶变换的方法(FFT)
Jul 21 Python
Python中numpy模块常见用法demo实例小结
Mar 16 Python
详解python 爬取12306验证码
May 10 Python
python2.7实现复制大量文件及文件夹资料
Aug 31 Python
postman和python mock测试过程图解
Feb 22 Python
matplotlib 多个图像共用一个colorbar的实现示例
Sep 10 Python
五种Python转义表示法
Nov 27 Python
Python如何给函数库增加日志功能
Aug 04 #Python
pycharm导入源码的具体步骤
Aug 04 #Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
Aug 03 #Python
Python 如何调试程序崩溃错误
Aug 03 #Python
Python 捕获代码中所有异常的方法
Aug 03 #Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 #Python
Python pip使用超时问题解决方案
Aug 03 #Python
You might like
发布一个用PHP fsockopen写的HTTP下载的类
2007/02/22 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
浅谈thinkphp5 instance 的简单实现
2017/07/30 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
2019/10/09 PHP
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
禁止拷贝网页内容的js代码
2014/01/22 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
js实现图片漂浮效果的方法
2015/03/02 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
各式各样的导航条效果css3结合jquery代码实现
2016/09/17 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
JS数组扁平化(flat)方法总结详解
2019/06/24 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
Vue 打包体积优化方案小结
2020/05/20 Javascript
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
Python中元组,列表,字典的区别
2017/05/21 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
2020/06/24 Python
HTML5所有标签汇总及标签意义解释
2015/03/12 HTML / CSS
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
Orvis官网:自1856年以来,优质服装、飞钓装备等
2018/12/17 全球购物
大学生农村教师实习自我鉴定
2013/09/21 职场文书
教育学专业毕业生的自我评价
2013/11/21 职场文书
技术总监岗位职责
2013/12/05 职场文书
销售员个人求职的自我评价
2014/02/10 职场文书
学习十八大坚定理想信念心得体会
2014/03/11 职场文书
人事代理委托书
2014/09/27 职场文书
教师节标语大全
2014/10/07 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
介绍长城的导游词
2015/01/30 职场文书
2015年营业员工作总结
2015/04/23 职场文书
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python