一义待抠图 图片
图片和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()