python 实现批量抠图

2023-11-08

系统:windows10

语言:python 3.6

编辑器:pycharm

安装库:

(1)paddlepaddle:

python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

(2)paddlehub 

pip install -i https://mirror.baidu.com/pypi/simple paddlehub

(3)scipy:

pip install scipy==1.1.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/

示例图片:

 

代码:

(1)生成蒙版

import os, paddlehub as hub
import scipy
huseg = hub.Module(name='deeplabv3p_xception65_humanseg') # 加载模型
path = './imgs/' # 文件目录
files = [path + i for i in os.listdir(path)] # 获取文件列表
results = huseg.segmentation(data={'image': files})
for i in  range(len(files)):
    scipy.misc.imsave('./marks/'+str(i)+'.jpg',results[i]['data'])

输出蒙版:

(2)抠图

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

(3)运行:

import koutu
import os
imgpath='./imgs/'
markpath='./marks/'
imgfiles = [imgpath + i for i in os.listdir(imgpath)] # 获取文件列表
markfiles = [markpath + i for i in os.listdir(markpath)] # 获取文件列表
print(imgfiles,markfiles)
for i in range(len(imgfiles)):
    mm = koutu.MatteMatting(imgfiles[i],markfiles[i])
    mm.save_image("./output/"+str(i)+".png", mask_flip=True) # mask_flip是指蒙版翻转,即把白色的变成黑色的,黑色的变成白色的

输出:

       

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 实现批量抠图 的相关文章

  • 查找 with: 块中定义的函数

    这是一些代码理查德 琼斯的博客 http www mechanicalcat net richard log Python Something I m working on 3 with gui vertical text gui labe
  • openpyxl 2.4.2:保存后公式生成的单元格值为空

    我使用 openpyxl 打开文件 编辑一些单元格并保存更改 这是一个例子 import openpyxl book openpyxl load workbook sheet path sheet book active for row i
  • 为什么我不能导入 geopandas?

    我唯一的代码行是 import geopandas 它给了我错误 OSError Could not find libspatialindex c library file 以前有人遇到过这个吗 我的脚本运行得很好 直到出现此错误 请注意
  • 如何使用pycaffe重构caffe网络

    我想要的是 加载网络后 我将分解一些特定的图层并保存新的网络 例如 原网 数据 gt conv1 gt conv2 gt fc1 gt fc2 gt softmax New net 数据 gt conv1 1 gt conv1 2 gt c
  • 如何在 Ubuntu 上安装 Python 模块

    我刚刚用Python写了一个函数 然后 我想将其做成模块并安装在我的 Ubuntu 11 04 上 这就是我所做的 创建 setup py 和 function py 文件 使用 Python2 7 setup py sdist 构建分发文
  • 如何自动替换多个文件的文本内容中的字符?

    我有一个文件夹 myfolder包含许多乳胶表 我需要替换其中每个字符 即替换任何minus sign by an en dash 只是为了确定 我们正在替换连字符INSIDE该文件夹中的所有 tex 文件 我不关心 tex 文件名 手动执
  • python中函数变量的作用域

    假设我们有两个函数 def ftpConnect ftp FTP server ftp login ftp cwd path def getFileList ftpConnect files ftp nlst print files 如果我
  • Python:随时接受用户输入

    我正在创建一个可以做很多事情的单元 其中之一是计算机器的周期 虽然我将把它转移到梯形逻辑 CoDeSys 但我首先将我的想法放入 Python 中 我将进行计数 只需一个简单的操作 counter 1 print counter 跟踪我处于
  • 反加入熊猫

    我有两个表 我想附加它们 以便仅保留表 A 中的所有数据 并且仅在其键唯一时添加表 B 中的数据 键值在表 A 和 B 中是唯一的 但在某些情况下键将出现在表 A 和 B 中 我认为执行此操作的方法将涉及某种过滤联接 反联接 以获取表 B
  • 使用 genfromtxt 导入 numpy 中缺失值的 csv 数据

    我有一个 csv 文件 看起来像这样 实际文件有更多的列和行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 假设文件的名称是info csv如果我尝试使用导入它 data numpy genfromtxt i
  • Python 中的这种赋值方式叫什么? a = b = 真

    我知道关于元组拆包 http docs python org tutorial datastructures html tuples and sequences但是当一行中有多个等号时 这个赋值被称为什么 阿拉a b True 它总是让我有
  • Python unicode 字符代码?

    有没有办法将 Unicode 字符 插入 Python 3 中的字符串 例如 gt gt gt import unicode gt gt gt string This is a full block s unicode charcode U
  • FastText - 由于 C++ 扩展未能分配内存,无法加载 model.bin

    我正在尝试使用 FastText Python APIhttps pypi python org pypi fasttext https pypi python org pypi fasttext虽然 据我所知 此 API 无法加载较新的
  • 在 pip.conf 中指定多个可信主机

    这是我尝试在我的中设置的 etc pip conf global trusted host pypi org files pythonhosted org 但是 它无法正常工作 参考 https pip pypa io en stable
  • 在谷歌C​​olab中使用cv2.imshow()

    我正在尝试通过输入视频来对视频进行对象检测 cap cv2 VideoCapture video3 mp4 在处理部分之后 我想使用实时对象检测来显示视频 while True ret image np cap read Expand di
  • 在pycharm中调试python代码

    这个问题类似于this https stackoverflow com questions 10240018 how to use pycharm to debug python script一 我正在尝试调试pyethapp https
  • 是否可以强制浮点数的指数或有效数匹配另一个浮点数(Python)?

    这是我前几天试图解决的一个有趣的问题 是否可以强制一个的有效数或指数float与另一个人一样float在Python中 出现这个问题是因为我试图重新调整一些数据 以便最小值和最大值与另一个数据集匹配 然而 我重新调整后的数据略有偏差 大约小
  • 使用 Keras 和 fit_generator 绘制 TensorBoard 分布和直方图

    我正在使用 Keras 使用 fit generator 函数训练 CNN 这似乎是一个已知问题 https github com fchollet keras issues 3358TensorBoard 在此设置中不显示直方图和分布 有
  • 如何在SqlAlchemy中执行“左外连接”

    我需要执行这个查询 select field11 field12 from Table 1 t1 left outer join Table 2 t2 ON t2 tbl1 id t1 tbl1 id where t2 tbl2 id is
  • 使用 numpy 加速 for 循环

    下一个 for 循环如何使用 numpy 获得加速 我想这里可以使用一些奇特的索引技巧 但我不知道是哪一个 这里可以使用 einsum 吗 a 0 for i in range len b a numpy mean C d e f b i

随机推荐

  • Docker学习进阶篇

    学自狂神 视频地址 https www bilibili com video BV1kv411q7Qc share source copy web 目标 掌握 docker基础 原理 网络 服务 集群 错误排查 日志 linux docke
  • java处理时间字符串2021-08-04T16:00:00.000Z

    背景 业务中收到了字符串2021 08 04T16 00 00 000Z 也有可能是2021 08 05 或者2021 08 05 12 00 00由于不确定性 需要手动转换时间 直接上代码 public static String int
  • 在webpack中使用monaco-editor

    目录 前言 使用 自己总结的使用过程 1 安装 2 在页面中使用 3 开启辅助功能 4 如何设置菜单中文显示效果 5 编辑器功能 6 monaco editor使用到的JS文件如何压缩 2020年4月28日11 49 58 前言 我查过网上
  • ROS中多个工作空间同时工作

    ROS开发中 有时需要建多个工作空间 将不同的功能包区别开来 但是 多个工作空间会存在相互影响的情况 如何让它们能同时工作且相互不影响 需要技巧 这里需要清楚ROS工作空间的工作原理 本文做个详细介绍 1 ROS PACKAGE PATH环
  • 汽配企业如何把MES管理系统的价值利用到最大化

    随着信息技术的快速发展 越来越多的汽配企业开始引入MES生产管理系统 以提高生产效率 优化资源利用和提升产品质量 然而 要想实现MES系统的最大化价值 汽配企业需要从以下几个方面入手 首先 汽配企业应该充分了解MES系统的功能和特点 并根据
  • git笔记

    git笔记 第一次使用配置 git config global user email you example com git config global user name Your Name 生成ssh key ssh keygen t
  • Matplotlib Intermediate Styling with cycler

    Styling with cycler 自定义属性循环设置的演示以控制多个 line 的图的颜色和其他样式属性 这个例子演示了两种不同的 API 设置 rc 参数 指定默认属性循环 这会影响所有随后的 axes 不会影响已经创建的 axes
  • 论文笔记:Learning Transferable Visual Models From Natural Language Supervision(CLIP)

    1 Intro 目前最先进的CV模型 大部分是现有一个定义好的类别的集合 然后模型通过预测这些提前定义好的类别 从而完成模型的训练 这些提前定义好的类别会大大简化问题本身 但采用了这种有限制性的监督信号 也大大限制了模型的泛化性 尤其是识别
  • 详解Python的切片(Slice)

    先看例子 array 0 1 2 3 4 5 print array print array 1 print array 2 print array 4 1 print array 4 5 print array 10 3 结果是 0 1
  • Ubuntu 12.04 搭建Android开发环境

    Ubuntu 12 04 搭建Android开发环境 2013 7 29 Linux环境下搭建Android开发环境 大部分开发人员可能都在Windows下做开发 可能是感觉在Windows下比较方便 我感觉也是 不过作为一名开发者仅局限在
  • R语言内置颜色色板+生成代码

    R语言内置颜色参照色板 日常使用中 想用一些R语言内置颜色 网上始终没有找到相对齐全的内置色板 于是自己写了一个 R语言内置颜色总共657种 文中代码共生成560种颜色 去掉了部分Grey渐变色 代码如下 RColors 568 col l
  • spring文件上传大小限制,Springboot大于一1G文件上传

    前言 一 SpringMVC简介 1 1 SpringMVC引言 为了使Spring有可插入的MVC架构 SpringFrameWork在Spring基础上开发SpringMVC框架 从而在使用Spring进行WEB开发时可以选择使用Spr
  • 宋浩线性代数笔记(六)二次型

    本章的内容比较少且均通俗易懂 较第三章和第五章容易许多 之后还有针对于数学一的第7更 数二数三的选手已经可以完结撒花
  • Dagger2 设计模式之构建者模式

    Dagger 中的设计模式分析 Builder 模式 DaggerFatherComponent 对象的构建 Dagger 中对 DaggerFatherComponent 对象的构建可以拆分成三部分 一 构建使用 Inject 注解构造函
  • ARMV8体系结构简介:AArch64应用级体系结构之Atomicity

    1 前言 Atomicity是内存访问的一个属性 描述为原子性访问 包括single copy atomicity和multi copy atomicity 2 基本概念 observer 可以发起对memory read write访问的
  • 经典机器学习算法之SVM算法

    本篇文章旨在让完全不懂的小伙伴对该算法有一个初步认识与理解 只适用于小白 如果想深入了解 可以参考本文的参考文章 文章目录 一 算法介绍 1 SVM简介 2 支持向量 二 算法分析 1 线性可分情况 线性可分的理解 找到最优的超平面 2 线
  • 【第四阶段】kotlin语言中的数组类型

    1 kotlin语言中的数组类型 类型 定义 IntArray intArrayOf DoubleArray doubleArrayOf LongArray longArrayOf ShortArray shortArrayOf ByteA
  • 模拟实现内存动态分区分配与回收(完整代码)

    memory类 package memory import java util LinkedList import java util Scanner public class memory private int size 内存大小 pr
  • vscode开发python项目使用flake8、yapf工具格式化pip8编码规范

    前言 使用flake8 yapf工具工具去格式化py文件 有助于生成满足pep8规范 使用快捷键即可完成 提高开发效率 安装配置 1 win10下安装flake8 yapf pip install flake8 pip install ya
  • python 实现批量抠图

    系统 windows10 语言 python 3 6 编辑器 pycharm 安装库 1 paddlepaddle python m pip install paddlepaddle i https mirror baidu com pyp