起因

这段时间很火的证件照在线生成技术很是火,所以研究了一下这项技术,原本以为只需要用扣扣人物换一张底色即可,但并非如此,实践证明用python的OpenCV技术来实现非常不理想。一下是我找到的几种证件照换底色代码。

实现代码

第一种:

import cv2
import  numpy as npimg=cv2.imread('timg.jpg')
#缩放
rows,cols,channels = img.shape
img=cv2.resize(img,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape
cv2.imshow('img',img)#转换hsv
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower_blue=np.array([90,70,70])
upper_blue=np.array([110,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
cv2.imshow('Mask', mask)#腐蚀膨胀
erode=cv2.erode(mask,None,iterations=1)
cv2.imshow('erode',erode)
dilate=cv2.dilate(erode,None,iterations=1)
cv2.imshow('dilate',dilate)#遍历替换
for i in range(rows):for j in range(cols):if dilate[i,j]==255:img[i,j]=(0,0,255)#此处替换颜色,为BGR通道
cv2.imshow('res',img)cv2.waitKey(0)
cv2.destroyAllWindows()

最终效果

整体布局情况下还是容易扣出但是一般就失去了证件照真正的意义(既然自己原本就是一张蓝色图片换成红色也基本上没必要)。

技术难度

这项技术主要难度就在于抠出人体范围,如何告诉程序这个范围在那一块,如果是背景单色的请客下很容易识别出来,但是复杂情况下就是很糟糕的一种情况了,这里我找到了一款百度AI发布的一款不错的产品百度人像分割 ,通过分割复杂情况下背景来最后分出人像部分。

这里感觉还不错,能分割复杂场景下的图片

import cv2
import base64
import numpy as np
import timefrom aip import AipBodyAnalysis# 在百度云中申请,每天各接口有 500 次调用限制.
startTime = time.time()
APP_ID = '****'
API_KEY = '****'
SECRET_KEY = '****'client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY)imgfile = 'test2.jpg'
ori_img = cv2.imread(imgfile)
height, width, _ = ori_img.shapewith open(imgfile, 'rb') as fp:img_info = fp.read()seg_res = client.bodySeg(img_info)
labelmap = base64.b64decode(seg_res['labelmap'])
nparr = np.fromstring(labelmap, np.uint8)
labelimg = cv2.imdecode(nparr,1)
labelimg = cv2.resize(labelimg,(width,height), interpolation=cv2.INTER_NEAREST)
new_img = np.where(labelimg==1, 255, labelimg)
maskfile = imgfile.replace('.jpg', '_mask.png')
cv2.imwrite(maskfile, new_img)res_imgfile = imgfile.replace('.jpg', '_res.jpg')
result = cv2.bitwise_and(ori_img, new_img)
cv2.imwrite(res_imgfile, result)
endTime = time.time()
print("useTime: ", endTime-startTime)
print('Done.')
————————————————
版权声明:本文为CSDN博主「echo_1994」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/echo_1994/article/details/84317833

这是echo_1994博主给出的具体调用代码

目前最好的效果

但是根据测试往往很多地方如 不清晰,图片不正等情况下或者证件照尺寸等问题还是解决不了这个问题,后来百度后找到了一款在线生成证件照的几家平台,个人感觉在线生成证件照(https://www.taobaxiu.com)这个服务平台算是目前不错的,我体验了一下(源代码收费)。
(对比效果图)
虽然运行时间稍微有点久,但是自动抠出来的效果整体还是不错的,并且能准确识别背景以及座椅等复杂情况下的图片,据说有美颜功能等等。

总结

无论是在线生成证件照还是用python实现的代码,无非就是一个能够看谁更加精准的分离人像,至于替换证件照背景是很简单的事情。

证件照在线生成源代码相关推荐

  1. 软著申请60页的源代码文档在线生成工具

    1.首先访问网站软著代码在线生成工具 - 软著生成word - word生成 2.在对应的软件名称版本号和公司名称处填写,此处主要设置的就是word中的页眉和页脚. 3.将有效源代码整理到一个文件夹中 ...

  2. 如何自制证件照?怎么在线生成证件照?

    现在使用证件照的场合越来越多了,很多小伙伴还不知道怎么证件照制作(https://www.yasuotu.com/zjzzz)的方法,所以今天小编就带给大家一个可以在线生成证件照的简易攻略,看完下面的 ...

  3. 微名片php源码,mingpian 微名片源码。在线生成 . . WEB(ASP,PHP,...) 240万源代码下载- www.pudn.com...

    文件名称: mingpian下载  收藏√  [ 5  4  3  2  1 ] 开发工具: PHP 文件大小: 19370 KB 上传时间: 2015-07-04 下载次数: 0 提 供 者: ju ...

  4. Asp.Net Core在线生成二维码

    前言: 原先用zxing Code写过基于Winfrom的批量生成二维码工具,以及单个生成二维码工具:批量生成二维码Gihub源代码 今天尝试用QRCoder 加 Asp.Net Core 写了一个在 ...

  5. 打开json文件的工具_Flutter中JSON转Model——在线生成

    在开发过程中,我们一般都是使用插件或工具一键生成实体类的,这样极大的提高了开发效率,目前我们可以通过在线生成的方式来一键生成Dart类. 1. 使用json_to_dart 地址: https://j ...

  6. 手把手教你使用 Java 在线生成 pdf 文档

    一.介绍 在实际的业务开发的时候,研发人员往往会碰到很多这样的一些场景,需要提供相关的电子凭证信息给用户,例如网银/支付宝/微信购物支付的电子发票.订单的库存打印单.各种电子签署合同等等,以方便用户查 ...

  7. Java语言使用注解处理器生成代码——第三部分:生成源代码

    原文作者:deors 原文地址:https://deors.wordpress.com/2011/10/31/annotation-generators/ 译文作者:Jianan - qinxiand ...

  8. 应用体验:证件照一键生成

    应用体验:证件照一键生成 本项目主要是为了方便大家照不那么严格的证件照,纯自助,只要拿手机一拍,在"应用体验"页面上传,项目自动抠图和排版,再下载下来的就是符合背景色要求的证件照了 ...

  9. 生日快乐程序_亲爱的陕师大:75岁生日快乐!一起走过师大时光,在线生成你的师大印迹!...

    终南山下 曲江池畔 栉风沐雨 杏坛砥柱 扎根西部 初心不忘 教育报国 使命牢记 薪火相传 桃李晖光 风光雨霁 盛世华章 厚德积学 励志敦行 传承西部红烛精神 抱道不曲 拥书自雄 同心共赴时代荣光 今天 ...

最新文章

  1. 为x86 CPU自动调度神经网络
  2. centos中用MySQL创建新表_CentOS下使用Shell批量创建数据库表
  3. python学习笔记(五)——函数基础和函数参数
  4. 创建水印文字_推荐免费物业现场品质管理新工具—马克水印相机
  5. 在linux下使用udev获取热插拔(hotplug)事件
  6. 阿里云MVP:如何设计实现一个通用的微服务架构?
  7. 获取两个数据的交集_Redis学习笔记统计该如何选择数据类型
  8. centos7网卡编辑_Centos7修改网卡名称
  9. 区间DP lightoj 1422
  10. Vue:vue中axios发起http请求报错net::ERR_CERT_DATE_INVALID
  11. Quartus prime工程中各种文件的后缀及意义
  12. java 自然周_java 使用Calendar类计算每月有多少自然周,并输出每周的开始和结束日期...
  13. Windows7 Embedded Standard x64更新代码80072EFE解决方法
  14. Java并发编程艺术
  15. 批处理(.bat)文件
  16. seata适配人大金仓(kingbase8)数据库
  17. mp4视频 一帧字节大小
  18. Error creating bean with name ‘BAdminMapper‘ defined in file [C:\Users\ASUS\Desktop\FleakMarket-mast
  19. linux小白命令,linux命令---小白笔记
  20. QT上实现FTP传输

热门文章

  1. MFC使用OpenCV两种版本实现mp4文件的播放
  2. 中国营销杀手独门暗器揭秘
  3. 2018年上海人工智能大会(SHAI2018)即将在上海举行
  4. 集体过冬,Hyper-V为企业省钱
  5. 在 Kubernetes 上部署 Traefik Ingress
  6. visual studio登陆界面空白_电脑同时登陆两个微信,你会吗?
  7. 学成在线首页【前端知识】
  8. 实训十二:路由器静态路由配置
  9. 桂 林 理 工 大 学实 验 报 告 实验名称实验六 函数
  10. 北京小升初计算机编程特长生班,北京特长生小升初测试启动 家长凌晨排队取号 图...