文档章节

深度学习与图像处理实例:人像背景虚化与背景替换

IOTService
 IOTService
发布于 09/18 23:47
字数 499
阅读 190
收藏 0

简单人像背景虚化处理思路如下:

  1. 对图像内容分割,提取人像,背景
  2. 背景模糊处理
  3. 人像与模糊处理后的背景融合

本实例使用DeepLabV3图像分割深度学习模型实现。代码如下:

import numpy as np
import tensorflow as tf
import cv2
from deeplabmodel import *

def create_pascal_label_colormap():
    colormap = np.zeros((256, 3), dtype=int)
    ind = np.arange(256, dtype=int)

    for shift in reversed(range(8)):
        for channel in range(3):
            colormap[:, channel] |= ((ind >> channel) & 1) << shift
            ind >>= 3
    return colormap

def label_to_color_image(label):
    if label.ndim != 2:
        raise ValueError('Expect 2-D input label')

    colormap = create_pascal_label_colormap()

    if np.max(label) >= len(colormap):
        raise ValueError('label value too large.')
    return colormap[label]

def load_model():
    model_path = '../resources/models/tensorflow/deeplabv3_mnv2_pascal_train_aug_2018_01_29.tar.gz'#'deeplab_model.tar.gz'
    MODEL = DeepLabModel(model_path)
    print('model loaded successfully!')
    return MODEL

model = load_model()

src = cv2.imread('../resources/images/person2.jpg')
# 背景图像
src_view = cv2.imread('../resources/images/view.jpg')

resized_im, seg_map = model.run2(src)
resized_view = cv2.resize(src_view,(resized_im.shape[1],resized_im.shape[0]))
resized_view = cv2.medianBlur(resized_view,11)
seg_image = label_to_color_image(seg_map).astype(np.uint8)
print(seg_map.dtype)
# seg_map = cv2.GaussianBlur(np.uint8(seg_map),(11,11),0)
src_resized = cv2.resize(src,(resized_im.shape[1],resized_im.shape[0]))
# seg_image = cv2.GaussianBlur(seg_image,(11,11),0)
bg_img = np.zeros_like(src_resized)

# 复制背景
bg_img[seg_map == 0] = src_resized[seg_map == 0]

blured_bg = cv2.GaussianBlur(bg_img,(11,11),0)
result = np.zeros_like(bg_img)

# 合成
result[seg_map > 0] = resized_im[seg_map > 0]
result[seg_map == 0] = blured_bg[seg_map == 0]

# 背景变换与合成
result_2 = np.zeros_like(bg_img)
result_2[seg_map > 0] = src_resized[seg_map > 0]
result_2[seg_map == 0] = resized_view[seg_map == 0]

cv2.imshow('src',src)
cv2.imshow('resized_im',resized_im)
cv2.imshow("seg_image",seg_image)
cv2.imshow('bg_image',bg_img)
cv2.imshow('blured_bg',blured_bg)
cv2.imshow('result',result)
cv2.imshow('result_2',result_2)

cv2.waitKey()
cv2.destroyAllWindows()

程序运行结果:

原始图像:

提取的人像Mask图像:

背景图像:

背景模糊图像:

背景虚化结果:

背景替换结果:

基本实现人像背景虚化效果与背景替换,但是还有很多细节没有优化,后期将进一步优化。

© 著作权归作者所有

共有 人打赏支持
IOTService
粉丝 20
博文 150
码字总数 34201
作品 0
广州
其他
私信 提问
【百度AI人像分割】Java示例代码

接口能力: 对于输入的一张图片(可正常解码,且长宽比适宜),识别人体的轮廓范围,与背景进行分离,适用于拍照背景替换、照片合成、身体特效等场景。输入正常人像图片,返回分割后的二值结果...

小帅帅丶
09/09
0
0
深度学习与图像处理之:人像背景虚化

简单实现思路: 对图像内容进行分割,提取人像 对图像背景进行模糊化处理 将人像和背景重新合成 在这里,使用DeepLabV3模型对图像内容进行分割并提取人像,实现的代码如下: 原图: 人像提取...

IOTService
09/18
0
0
为什么说天天P图是一款人工智能App

提到人工智能,大多数人的第一反应就是距离我们太远了。智能机器人、无人驾驶,这些好像都是未来式。我们一直以来都在告诉大家,人工智能其实就在我们身边。 比如,应用最广的美颜自拍,更准...

脑极体
2017/12/21
0
0
任何安卓手机升级到Android 8.0都将可以使用iPhone X的人像模式

  开启人像模式前后对比   你有没有羡慕过苹果iPhone X和华为Mate 10、小米6等一些安卓旗舰双摄手机的人像模式呢?事实上单摄像头谷歌Pixel 2的人像模式可以运行在其他Android 8.0系统的...

科技浪尖
01/07
0
0
爱奇艺蒙版AI:弹幕穿人过,爱豆心中坐

机器之心原创,作者:邱陆陆。 作为(伪)AI 行业从业者,之心编辑部里的小伙伴们自认都能够以不错的置信度人工识别「人工智能与人工智障」。但是,当我把下面这张爱奇艺 app 的截图放在大家...

11/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

NEO 节点介绍

全节点(full nodes)是存储 NEO 区块链全部数据的节点,通过 P2P 的方式与区块链网络连接,在区块链网络中,所有的全节点都是平等的,既充当客户端又充当服务器。 NEO 有两个全节点程序: ...

NEO-FANS
3分钟前
0
0
内网穿透大杀器--EarthWorm

0x00 前言 如果感觉本文对你有帮助,请在文章末尾点个赞,谢谢表哥们支持! 当你在内网渗透,并且拿下一台机器的权限时,你是不是觉得已经算是一次完整的渗透了? 不来一次内网漫游,渗透是不...

刀剑如梦
8分钟前
0
0
PiggyMetrics分布式框架

https://github.com/sqshq/PiggyMetrics

丁建祥
10分钟前
0
0
零距离接触阿里云时序时空数据库TSDB

概述 最近,Amazon新推出了完全托管的时间序列数据库Timestream,可见,各大厂商对未来时间序列数据库的重视与日俱增。 阿里云TSDB是阿里巴巴集团数据库事业部研发的一款高性能分布式时序时空...

阿里云云栖社区
18分钟前
0
0
OkHttpClient封装

import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Map; import java.util.TreeMap; import java.util.Map.Entry; import o......

尘叙缘
20分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部