文档章节

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

IOTService
 IOTService
发布于 09/18 23:47
字数 499
阅读 37
收藏 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
粉丝 19
博文 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
盘点最新发布的3款千元全面屏手机:有颜有料

每次到年底的时候都会做下盘点跟总结的工作,对于手机市场也不例外。今年热热闹闹的手机市场可以用三个词来总结:“人工智能”、“全面屏”以及“人脸识别”,不过这些功能以往只能同时存在于...

明美无限
2017/12/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

线性一致性和 Raft

作者:沈泰宁 在讨论分布式系统时,共识算法(Consensus algorithm)和一致性(Consistency)通常是讨论热点,两者的联系很微妙,很容易搞混。一些常见的误解:使用了 Raft [0] 或者 paxos ...

TiDB
20分钟前
0
0
兄弟连区块链教程以太坊源码分析core-state-process源码分析

## StateTransition状态转换模型 /* The State Transitioning Model 状态转换模型 A state transition is a change made when a transaction is applied to the cu......

兄弟连区块链入门教程
22分钟前
0
0
linear-gradient渐变中的参数

在看张鑫旭的博客 遇到渐变数值后面带参数不太理解 @supports (-webkit-mask: none) or (mask: none) { .box { border: none; background: linear-gradient(to bottom, #34538...

红羊在厦门
23分钟前
0
0
Python yagmail模块自动发邮件

Python发邮件yagmail模块 import yagmail#连接服务器yag=yagmail.SMTP('xx@163.com','yy','smtp.163.com')#邮箱正文contents=["test","email send"]#发送邮件#yag.send('...

小白兔_球球
24分钟前
1
0
pada mysql

CREATE SCHEMA `exchange` DEFAULT CHARACTER SET utf8mb4 ;

qwfys
33分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部