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

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

简单实现思路:

  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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Mac WebServer、MySql安装、PHPAdmin安装

    Mac WebServer、MySql安装、PHPAdmin安装

    2021年9月1日
    82
  • 【转载】【转自AekdyCoin的组合数取模】

    【转载】【转自AekdyCoin的组合数取模】本篇文章主要介绍了”【组合数求模】转自AekdyCoin”,主要涉及到【组合数求模】转自AekdyCoin方面的内容,对于【组合数求模】转自AekdyCoin感兴趣的同学可以参考一下。这个表示的是从n个元素中选取m个元素的方案数。(PS.组合数求模似乎只用在信息学竞赛和ACM竞赛等计算机编程设计大赛中……,求在现实中的运用)可以知道当n,m 取得比较大的

    2022年7月23日
    6
  • 大学四年嵌入式学习心得体会

    大学四年嵌入式学习心得体会我所在学校是普通的本科院校,从大一开始加入嵌入式实验室,一直在实验室呆了三年半,从大一的懵懂无知,天天看着C语言书自己敲代码,到后来学习51单片机,STM32,做过3-4个项目,参加各种比赛,轻轻松松搞定毕业设计。在此写的这篇Chat主要是针对大学学习嵌入式的童鞋的,嵌入式不容易学,牵扯的内容,知识点太多,你是否不知道如何下手呢?是否在迷茫为什么我学的这么吃力呢?下面作为过来人的我为您解…

    2022年6月12日
    28
  • 8款安卓数据恢复软件测评 2019更新版【国外篇】

    8款安卓数据恢复软件测评【国外篇】相信多数人都有过手机数据丢失的悲痛经历吧,尤其是当你没有任何可用的备份的时候。前几天我也遇到了这个问题,那个着急和纠心啊,于是我就开始了全网搜索国内外一切可用的手机数据恢复软件。我把网上能找的能试用的都给试了一遍,这里给大家总结一下!和手机系统一样,现在的手机数据恢复软件也区分为安卓,iOS和WP等,目前市场上主流的是针对安…

    2022年4月9日
    148
  • SSM-Mybatis(1)[通俗易懂]

    SSM-Mybatis(1)[通俗易懂]Mybatis什么是MybatisMyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。第一个Mybatis程序搭建环境数据库CREATE DATABASE mybatis;uesr mybatis

    2022年8月8日
    4
  • kafka集群搭建&zookeeper集群搭建

    kafka集群搭建&zookeeper集群搭建1.安装准备jdk-8u162-linux-x64.tarzookeeper-3.4.12.tar.gzkafka_2.11-2.0.0.tgz2.准备至少三台虚拟机192.168.196.128192.168.196.131192.168.196.1323.Java环境安装(略…自行百度)4.搭建zookeeper集群在每台主机下执行以下步骤:移动至/usr/local下:mvzookeeper-3.4.12.tar.gz/usr/local解压,重命名:tar-z

    2022年6月7日
    33

发表回复

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

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