python和pil实现抠图_python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
因为最近在做深度学习抠图,正好要用到蒙版进行抠图,所以我将抠图代码进行了封装注释,可以直接使用。可能走了弯路,若有高见请一定提出!
主要代码
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
mask.jpg
output.png
python和pil实现抠图_python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图相关推荐
- python抠透明图_python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
因为最近在做深度学习抠图,正好要用到蒙版进行抠图,所以我将抠图代码进行了封装注释,可以直接使用.可能走了弯路,若有高见请一定提出! 主要代码 import cv2 from PIL import Im ...
- python人工自动抠图_Python - AI自动抠图
一.简介 抠图是用PS? 用魔棒和快速选择工具? 遇到复杂背景怎么办? 最近发现一个神奇的工具--Remove Image Background 它是基于Python.Ruby和深度学习技术开发,通过 ...
- python画聚类图、并且把聚类图保存起来_Python利用igraph绘制复杂网络聚类(社区检测)结果图-Go语言中文社区...
前言:研究生期间主要做复杂网络聚类,也称为社区检测.临毕业前,老师让之前发表的论文里的算法代码C化,并写出界面进行可视化.由于之前虽然做过可视化,但基本上都是将聚类结果导入到pajek或者gephi这 ...
- python处理表格数据教程_python利用Excel读取和存储测试数据完成接口自动化教程...
http_request2.py用于发起http请求 #读取多条测试用例 #1.导入requests模块 import requests #从 class_12_19.do_excel1导入read_ ...
- python爬火车票是不是违法_python利用selenium+requests+beautifulsoup爬取12306火车票信息...
在高速发展的时代.乘车出远门是必不可少的,有些查询信息是要收费的.这里打造免费获取火车票信息 想要爬取12306火车票信息,访问12306官方网站,输入出发地,目的地 ,时间 之后点击确定,这是我 ...
- python抠图_python 网站自动抠图
python 网站自动抠图 翻东西, 突然找到了以前用python写的自动下载网站图片的一个脚本 很好用, 如果修改的话, 只要将路径改成自己的即可! picdown.py #! /usr/bin/p ...
- python用turtle画彩虹_Python利用turtle库绘制彩虹代码示例
语言:Python IDE:Python.IDE 需求 做出彩虹效果 颜色空间 RGB模型:光的三原色,共同决定色相 HSB/HSV模型:H色彩,S深浅,B饱和度,H决定色相 需要将HSB模型转换为R ...
- python视频图片识别算法_python利用Opencv进行人脸识别(视频流+图片)
首先:需要在在自己本地安装opencv具体步骤可以问度娘 如果从事于开发中的话建议用第三方的人脸识别(推荐阿里) 1.视频流中进行人脸识别 # -*- coding: utf-8 -*- import ...
- python实现第三方验证码获取_python利用第三方模块,发送短信验证码(测试案例)...
今天学到个利用python第三方,发送短信验证码的代码,速实现一遍,短信立即收到,果断记录在案! 环境:虚拟机上centos7平台,python2.7版本: 第三方服务提供商是:云通讯官网:www.y ...
最新文章
- tcpdump dns流量监控
- Ibatisnet示例:npetshop学习一
- Codeforces Round #504 E - Down or Right 交互题
- 提高ipad浏览器下大尺寸xml文件解析的性能
- [vue] v-model是什么?有什么用呢?
- 【云服务】浅析XaaS
- POJ 1182 食物链(并查集+偏移向量)题解
- 头部导航菜单选中状态切换
- Algorithm:贪心策略之区间调度问题
- [linux] C语言Linux系统编程-做成守护进程
- springboot的if else过多解决方案
- 软件测试金九银十即将到来,求职套路多你有多大把握拿offer
- java远古时代-驯龙骑士破解版_驯龙骑士apk下载_驯龙骑士安卓游戏v1.12.0-游迅网...
- Jeff Dean:谷歌大脑背后的“大脑” | AI名人堂
- STM32MP157(实验九)——SysTick定时器us延时
- 无线渗透(四)WPA攻击
- C语言给小学生出题(随机1~99进行四则运算)
- Linux 复制、粘贴快捷键
- 团队形成的阶段_误区39:团队自然形成,不必费心打造
- 2019上海计算机专业,2019上海软科世界一流学科排名计算机科学与工程专业排名曼彻斯特大学排名第101-150...
热门文章
- 2016年8月5日 星期五 --出埃及记 Exodus 16:5
- MFCC(Mel-Frequency Cepstral Coefficients)特征
- 黑白激光打印机打印时出现黑道,怎么办?
- 连续签到程序逻辑分析以及做任务赚积分程序逻辑分析【完整版】
- 2019.09.21 多校联合训练(普及组)
- Xamarin之TableView
- iOS 底层原理之 类的原理分析(上)
- mysql假设永恒之塔_直接修改永恒之塔MYSQL 语句把账号变成admin(GM)
- 浏览器数据库 indexDB、webSQL
- js 将换行符转换为逗号并去掉尾部逗号