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

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

简单实现思路:

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


相关推荐

  • python发送soap报文_python处理SOAP API

    python发送soap报文_python处理SOAP API我们常见的API一般是restful,但是有的时候也会遇到非restful的时候,对于RestfulAPI,我们很容易用python处理。SOAPAPI我们如何来处理呢?首先我们需要了解RestfulAPI和SOAPAPI架构TheRepresentationalStateTransfer(REST)架构服务通过统一资源定位器(URL)公开。这个逻辑名称将资源的标识与所接…

    2022年7月13日
    22
  • clone一个react项目怎么运行[通俗易懂]

    首先当你从git上面clone一个项目的时候怎么让项目跑起来,首先看项目目录结构,找到README.md上面有项目运行的步骤,如果没有可以看package.json文件,找到scripts上面有dev所以跑起来项目就使用npmrundev有start就使用npmstart但是要先安装项目依赖使用npminstall依赖下载完成就可以使用npmrundev/npm…

    2022年4月15日
    35
  • python-PyPDF2

    python-PyPDF2作用:处理PDF文档提取文本,旋转页面,叠加页面1.pdfFileObj=open(‘meetingminutes.pdf’,’rb’)#打开pdf文档2.pdfReader=PyPDF2.PdfFileReader(pdfFileObj)#获取pdf文档数据3.pdfReader.numPages#获取页数4.pageObj=pdfReader.getPage(0)#获取指定页码的内…

    2022年6月23日
    30
  • centos7怎么关机_centos7重启后网卡关闭

    centos7怎么关机_centos7重启后网卡关闭开启NetworkManagercat<<EOF>/etc/NetworkManager/nm-system-settings.conf[main]plugins=ifupdown,keyfile[ifupdown]managed=trueEOFreboot关闭NetworkManagersystemctlstopNetworkManagersystemctldisableNetworkManagerrm-rf/var/lib/N…

    2022年9月27日
    2
  • 十款移动APP开发框架

    十款移动APP开发框架  十款移动APP开发框架:1.jquerymobile框架2.bootstrap框架3.ionic框架4.MobileAngularUI框架5.IntelXDK框架6.AppceleratorTitanium框架7.SenchaTouch框架8.KendoUI框架9.PhoneGap框架10.mui框架  1.jquerymobile框架  jQue…

    2022年5月31日
    378
  • u8和u16是什么意思_u8在哪里声明的

    u8和u16是什么意思_u8在哪里声明的unsignedint32(C语言标准表达方法)2.uint32_t;3.u32;这三种表达式是同一个意思,只是在不用的版本当中,为了兼容旧版本而出现这么多的表达方式。但不管怎么变化,都是基于标准c。主要用处是为了在定义数据类型的时候少写几个符号。unsignedchar=uint8_t=u8unsignedshortint=…

    2022年10月15日
    2

发表回复

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

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