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

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

简单实现思路:

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


相关推荐

  • SpringCloud SpringCloud与Dubbo的区别

    SpringCloud SpringCloud与Dubbo的区别(1)SpringCloud与Dubbo的服务治理框架全局性对比(2)最大的区别:SpringCloud抛弃了Dubbo的RPC通信,采用了基于HTTP的REST方式。严格来说,这两种方式各有优劣,虽然从一定程度上来说,后者牺牲了服务调用的性能,但是也避免了RPC带来的问题,并且REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸协议,不存在代码的强依赖性,这在强调快速演化稍…

    2022年5月29日
    30
  • 音视频技术的高光时刻: LiveVideoStackCon 2019上海 音视频技术大会

    Mux流媒体专家PhilCluff在4月19、20日举办的LiveVideoStackCon2019上海音视频技术大会中发表了主题演讲,并根据自己在大会中的所见所闻…

    2022年4月15日
    46
  • 【01】初识ThreadX

    【01】初识ThreadX简介ThreadX是一个成熟的商用硬实时嵌入式操作系统,被广泛应用于消费电子、航空航天、通信、工业控制与医疗等应用领域中,至今已服务超过62亿设备。它以轻量级的规模,提供了良好的实时性、可靠性与易用性,是嵌入式开发中不错的RTOS选择。凭借良好的发展势头,其母公司ExpressLogic于2019年被微软收购。技术上,ThreadXRTOS提供了高级调度、通信、同步、定时器、内存…

    2025年7月11日
    5
  • js读取本地json文件_jquery读取本地json文件

    js读取本地json文件_jquery读取本地json文件1.首先编写一个json文件:demo.json[{“name”:”张三”,”sex”:”男”,”email”:”zhangsan@123.com”},{“name”:”李四”,”sex”:”男”,”email”:”lisi@123.com”},{“name”:”王五”,”sex”:”女”,”email”:”wangwu@123.com…

    2022年10月12日
    4
  • [论文简读] Deep Neural Networks for Web Page Information Extraction

    [论文简读] Deep Neural Networks for Web Page Information Extraction

    2021年6月8日
    98
  • 来看看视频种子骗局[通俗易懂]

    来看看视频种子骗局1,都是很难下载的资源2,以1080BulRay命名3,文件大小集中在1G左右4,以xmous结尾(应该是作者为了好识别)5,都有官方宣传图片(Cover.jpg)和说明txt文件

    2022年4月17日
    41

发表回复

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

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