深度学习与图像处理之:人像背景虚化

深度学习与图像处理之:人像背景虚化

简单实现思路:

  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')
resized_im, seg_map = model.run2(src)
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]

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


cv2.waitKey()
cv2.destroyAllWindows()

原图:

7e020385b7f849650732179073836fb7e3a.jpg

人像提取结果:

6b516182c06a4d2cda5f0d8cc5d6b454c99.jpg

背景图像:

5127e0a633d4d3692791409496926f3c54d.jpg

背景模糊图像:

1970cb6ac0e2284978c3861dae6210b138a.jpg

合成结果:

270238fa83890e39560947e617be85de3e6.jpg

效果不太理想,但总体上实现了背景虚化。后期将进行细节优化。

转载于:https://my.oschina.net/wujux/blog/2054878

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101409.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MySQL中JOIN的用法

    MySQL中JOIN的用法JOIN 用于连表查询 主要有 5 种用法 下面分别演示这 5 种用法随便建 2 张表 结构如下字段 col1 用来使两张表有一个同名字段的 但其实没什么用 一 笛卡尔积 CROSSJOINCRO 使两张表的所有字段直接进行笛卡尔积 假设表 1 有 m 条数据 表 2 有 n 条数据 则结果数量为 m n 条 SELECT FROMtab1CROS 结果二 内连接 INNERJOIN 内连接需要用 ON 来指定两张表需要比较的字段 最终结果只显示满足条件的数据

    2025年9月16日
    0
  • iis服务器怎么设置exe网页,IIS环境服务器下网站防盗链具体怎么设置方法

    iis服务器怎么设置exe网页,IIS环境服务器下网站防盗链具体怎么设置方法IIS服务器防盗链具体怎么设置方法isapi_rewrite利用正则表达式进行替换规则的表示。进行正则表达式的编写的时候,可以利用isapi_rewrite提供的正则表达式测试工具(默认安装提供),进行调试。做好了匹配表达式和格式化表达式,我们可以把它们放到安装目录下的httpd.ini里面。文件保存后,不需重新启动iis即可生效。IIS服务器防盗链的方法是在httpd.ini里面加入如下语句Re…

    2022年7月23日
    8
  • linux history 增加时间戳

    linux history 增加时间戳为了方便查看脚本使用记录,为history增加时间戳。vi/etc/profile在最底端,增加下面两行代码:exportHISTTIMEFORMAT=”%Y-%m-%d%H:%M:%S”exportHISTSIZE=2000保存完毕后,使用下面的方式,使之快速生效:source/etc/profile…

    2022年7月13日
    21
  • linux安装redis 完整步骤

    linux安装redis 完整步骤最近在linux服务器上需要安装redis,来存放数据,增加用户访问数据的速度,由于是第一次安装,于是在百度上搜了一篇文章,按照这篇博客,顺利安装好了,因此将博主的文章拷过来记录一下,方便以后使用,也为需要的朋友提供一个方便,参考博文地址:https://www.cnblogs.com/lauhp/p/8487029.html安装:1.获取redis资源  wgethttp://download…

    2022年6月28日
    31
  • 利用PHP获取访客IP、地区位置、浏览器及来源页面等信息

    利用PHP获取访客IP、地区位置、浏览器及来源页面等信息

    2021年10月30日
    294
  • MyBatis查询结果resultType返回值类型详细介绍

    一、返回一般数据类型比如要根据id属性获得数据库中的某个字段值。mapper接口://根据id获得数据库中的username字段的值StringgetEmpNameById(Integerid);SQL映射文件:&amp;lt;!–指定resultType返回值类型时String类型的,str…

    2022年4月1日
    122

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号