前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【深度学习入门案例】三十行代码实现抠图及图片合成

【深度学习入门案例】三十行代码实现抠图及图片合成

作者头像
川川菜鸟
发布2021-10-19 11:17:03
4590
发布2021-10-19 11:17:03
举报

一义待抠图 图片

图片和py文件统计目录:

在这里插入图片描述
在这里插入图片描述

代码为:

代码语言:javascript
复制
#待预测图片
test_img_path = ["./test.jpg"]


import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread(test_img_path[0])

# 展示待预测图片
plt.figure(figsize=(10,10))
plt.imshow(img)
plt.axis('off')
plt.show()

返回:

在这里插入图片描述
在这里插入图片描述

二载预训练模型

通过加载PaddleHub DeepLabv3+模型(deeplabv3p_xception65_humanseg)实现一键抠图

代码语言:javascript
复制
import paddlehub as hub
module = hub.Module(name="humanseg_lite")
res = module.segment(
    paths = ["./test.jpg"],
    visualization=True,
    output_dir='humanseg_lite')

# 预测结果展示
test_img_path = "./humanseg_lite/test.png"
img = mpimg.imread(test_img_path)
plt.figure(figsize=(10,10))
plt.imshow(img)
plt.axis('off')
plt.show()

返回:

在这里插入图片描述
在这里插入图片描述

三.片合成

将抠出的人物图片合成在想要的背景图片当中

代码语言:javascript
复制
#图像合成
from PIL import Image
import numpy as np


def blend_images(fore_image, base_image):
    """
    将抠出的人物图像换背景
    fore_image: 前景图片,抠出的人物图片
    base_image: 背景图片
    """
    # 读入图片
    base_image = Image.open(base_image).convert('RGB')
    fore_image = Image.open(fore_image).resize(base_image.size)

    # 图片加权合成
    scope_map = np.array(fore_image)[:, :, -1] / 255
    scope_map = scope_map[:, :, np.newaxis]
    scope_map = np.repeat(scope_map, repeats=3, axis=2)
    res_image = np.multiply(scope_map, np.array(fore_image)[:, :, :3]) + np.multiply((1 - scope_map),
                                                                                     np.array(base_image))

    # 保存图片
    res_image = Image.fromarray(np.uint8(res_image))
    res_image.save("blend_res_img.jpg")
blend_images('./test.jpg', 'img.png')

# 展示合成图片
plt.figure(figsize=(10,10))
img = mpimg.imread("./blend_res_img.jpg")
plt.imshow(img)
plt.axis('off')
plt.show()

返回:

在这里插入图片描述
在这里插入图片描述

如此便是成功了,yeah!

四.完整源码

相关文件创建和图片可以创建和找,需要我得文件可以主页左侧栏联系我。

代码语言:javascript
复制
# coding=gbk
"""
作者:川川
@时间  : 2021/8/29 5:48
群:970353786
"""
#待预测图片
test_img_path = ["./test.jpg"]

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
img = mpimg.imread(test_img_path[0])
# 展示待预测图片
plt.figure(figsize=(10,10))
plt.imshow(img)
plt.axis('off')
plt.show()


#加载模型
import paddlehub as hub
module = hub.Module(name="humanseg_lite")
res = module.segment(
    paths = ["./test.jpg"],
    visualization=True,
    output_dir='humanseg_lite')

# 预测结果展示
test_img_path = "./humanseg_lite/test.png"
img = mpimg.imread(test_img_path)
plt.figure(figsize=(10,10))
plt.imshow(img)
plt.axis('off')
plt.show()

#图像合成
# from PIL import Image
# import numpy as np
#
#
# def blend_images(fore_image, base_image):
#     """
#     将抠出的人物图像换背景
#     fore_image: 前景图片,抠出的人物图片
#     base_image: 背景图片
#     """
#     # 读入图片
#     base_image = Image.open(base_image).convert('RGB')
#     fore_image = Image.open(fore_image).resize(base_image.size)
#
#     # 图片加权合成
#     scope_map = np.array(fore_image)[:, :, -1] / 255
#     scope_map = scope_map[:, :, np.newaxis]
#     scope_map = np.repeat(scope_map, repeats=3, axis=2)
#     res_image = np.multiply(scope_map, np.array(fore_image)[:, :, :3]) + np.multiply((1 - scope_map),
#                                                                                      np.array(base_image))
#
#     # 保存图片
#     res_image = Image.fromarray(np.uint8(res_image))
#     res_image.save("blend_res_img.jpg")
# blend_images('./humanseg_lite/test.png', 'img.png')
#
# # 展示合成图片
plt.figure(figsize=(10,10))
img = mpimg.imread("./blend_res_img.jpg")
plt.imshow(img)
plt.axis('off')
plt.show()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一义待抠图 图片
  • 二载预训练模型
  • 三.片合成
  • 四.完整源码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档