原标题:打开国庆的正确方式,教你用OpenCV-Python轻松生成微信国庆版头像

OpenCV轻松搞定,不信看内容

相信最近两天大家都被微信头像的国庆版新装刷爆了朋友圈了,不少人都@微信官方,要求换装为国庆版头像,朋友圈也是各种生成链接满天飞。其实这个事情在小编看来没有那么复杂,这么简单的事情怎么好意思随便@,直接自己100行代码搞定。

好了,废话少说,下面就给大家看看程序运行的效果,是不是辨识度很高,想知道怎么做的吗,继续往下看!

思路分析

01

完整的程序实现分为三个部分完成,第一部分首先需要准备一个模板图像,我准备的模板图像,是从腾讯官方截取的,算是借用吧,显示如下:

然后根据这个 模板图像,生成遮罩图层mask图像,这里主要是通过inRange来实现mask生成,通过imagewatch我观察到模板图中的空白区域的像素值为(216、216、216)所以上下浮点5,最终得到遮罩层mask图像如下:

注意:因为得到mask图像还有一些小的瑕疵,这个时候通过简单的形态学闭操作处理就会的比较好的轮廓外形。

有了mask之后,就可以对输入的模板图像与头像图像,进行融合,生成一张国庆版头像了,这个时候直接的像素相加效果会比较生硬。所以先通过高斯模糊生成边缘的融合权重,这样边缘看上去比较自然。

最后对选择的任意图像,都可以先通过人脸检测,自动定位到人脸区域,然后截取ROI,自动生成,如果无法自动检测到人脸,则会利用输入图像自动生成。人脸检测我这里采用OpenCV DNN的人脸检测方法,效果非常好!命中率很高!

代码实现

02

完整的代码分为三个部分

方法get_face负责输入图像的人脸检测与自动ROI提取与返回。代码如下:

defget_face(image, detect=True):

ifdetect isnotTrue:

returnimage

# 定义人脸ROI

x = 0

y = 0

width = 0

height = 0

# 加载网络

net = cv.dnn.readNetFromTensorflow(model_bin, config=config_text)

h = image.shape[ 0]

w = image.shape[ 1]

# 人脸检测

blobImage = cv.dnn.blobFromImage(image, 1.0, ( 300, 300), ( 104.0, 177.0, 123.0), False, False);

net.setInput(blobImage)

cvOut = net.forward

# Put efficiency information.

t, _ = net.getPerfProfile

label = 'Inference time: %.2f ms'% (t * 1000.0/ cv.getTickFrequency)

cv.putText(image, label, ( 0, 15), cv.FONT_HERSHEY_SIMPLEX, 0.5, ( 0, 255, 0))

# 绘制检测矩形

count = 0

fordetection incvOut[ 0, 0, :, :]:

score = float(detection[ 2])

ifscore > 0.5:

left = detection[ 3] * w

top = detection[ 4] * h

right = detection[ 5] * w

bottom = detection[ 6] * h

count += 1

x = np.int32(left - 100)

y = np.int32(top - 100)

height = np.int32((bottom - top) + 200)

width = np.int32((right - left) + 200)

ifx < 0:

x = 0

ify < 0:

y = 0

ifx+width > w:

width = w - x

ify+height > h:

height = h - y

ifcount == 1:

returnimage[y:y + height, x:x + width, :]

else:

returnimage

方法generate_new_profile负责自动生成国庆版头像,代码如下:

defgenerate_new_profile(flag_icon, avatar):

mask = cv.inRange(icon, ( 210, 210, 210), ( 225, 225, 225))

se = cv.getStructuringElement(cv.MORPH_RECT, ( 3, 3))

mask = cv.morphologyEx(mask, cv.MORPH_CLOSE, se)

# mask with gaussian

mask = cv.GaussianBlur(mask, ( 5, 5), 0)

cv.imshow( "mask", mask)

# blend

h, w = mask.shape[: 2]

avatar = cv.resize(avatar, (w, h), interpolation=cv.INTER_CUBIC)

cv.imshow( "profile", avatar)

result = np.zeros_like(avatar)

forrow inrange(h):

forcol inrange(w):

pv = mask[row, col]

w1 = pv / 255.0

w2 = 1.0- w1

b1, g1, r1 = avatar[row, col]

b2, g2, r2 = icon[row, col]

b1 = b1 * w1 + b2 * w2

g1 = g1 * w1 + g2 * w2

r1 = r1 * w1 + r2 * w2

result[row, col] = [np.int32(b1), np.int32(g1), np.int32(r1)]

returnresult

读取本地图像,调用上述两个方法的代码如下:

if__name__ == "__main__":

icon = cv.imread( "D:/images/flag.png")

src = cv.imread( "D:/images/zhigang.png")

cv.imshow( "input", icon)

cv.imshow( "profile", src)

avatar = get_face(src, False)

result = generate_new_profile(icon, avatar)

cv.imshow( "result", result)

cv.imwrite( "D:/result.png", result)

cv.waitKey( 0)

cv.destroyAllWindows

运行测试

传送门->代码下载地址:

https://github.com/gloomyfish1998/opencv_tutorial/tree/master/python返回搜狐,查看更多

责任编辑:

python opencv创建图像_打开国庆的正确方式,教你用OpenCV-Python轻松生成微信国庆版头像...相关推荐

  1. 打开十一的正确方式,教你用OpenCV-Python轻松生成微信十一版头像

    公众号[OpenCV学堂],致力于计算机视觉开发技术传播,原创技术文章200+的,涉及OpenCV开发.tensorflow开发.模型解析与训练.传统图像处理算法解析,对图像与视觉感兴趣的强烈推荐关注 ...

  2. opencv 创建图像_非艺术家的图像创建(OpenCV项目演练)

    opencv 创建图像 This project stemmed from my predilection of the visual arts - as a computing student, I ...

  3. python批量检索文献_快解锁新姿势,教你如何用Python搞定文献搜索和科研图片!...

    相比实验论文,发表SCI应该更让科研狗们重视和焦虑. 起初看到读博的同学发表SCI论文,心里面就已经酸了,后来「本科生发数篇 SCI」的新闻屡见不鲜,现在甚至连小学生都跑出来分一杯羹-- 前段时间,B ...

  4. python opencv创建图像_使用Python中OpenCV库创建一幅图片的RGB通道图片

    我们知道,在使用PhotoShop进行图片的抠取.创建和存储选区.存储图像的色彩资料等复杂操作时,经常会用到一个功能,那就是"RGB"通道,它能从三原色角度对一幅图片进行精准处理. ...

  5. python指定数组大小_在python中创建指定大小的多维数组方式

    python中创建指定大小的二维数组,有点像C++中进行动态申请内存创建数组,不过相比较而言,python中更为简单一些. 创建n行m列的二维数组: n = 2 m = 3 matrix = [Non ...

  6. 打开国庆的正确方式,用Python轻松生成国庆版头像

    OpenCV轻松搞定,不信看内容 公众号[OpenCV学堂],致力于计算机视觉开发技术传播,原创技术文章200+的,涉及OpenCV开发.tensorflow开发.模型解析与训练.传统图像处理算法解析 ...

  7. python自己创建模块_创建并发布自己的python模块

    python通过模块来共享组织代码,python不仅内置了丰富的标准库,而且python社区还贡献了大量的第三方模块,正是由于第三方模块大大扩展了python的应用领域,成就了如今python的江湖地 ...

  8. python怎么创建列表_用Python将一个列表分割成小列表的实例讲解 Python 如何创建一个带小数的列表...

    python里有一个列表,列表里有几个小列表,小列表#冒泡排序:scoreList = [['a',98],['c',45],['b',70],['d',85],['h',85],['f',92],[ ...

  9. python 批量创建线程_【Python】批量创建线程

    在<[Python]线程的创建.执行.互斥.同步.销毁>(点击打开链接)中介绍了Python中线程的使用,但是里面线程的创建,使用了很原始的方式,一行代码创建一条.其实,Python里是可 ...

最新文章

  1. 【VMCloud云平台】私有云门户第一朵Web云(一)
  2. 新5 年时间服务器从 0 到 200,一个创业公司的架构野蛮生长史头疼哈
  3. Java并发编程的基础-为什么要复位
  4. Python+Opencv寻找图像中最亮的区域
  5. golang 修改nginx配置文件_「系统架构」Nginx调优,不可错过的几点
  6. 前端学习(1897)vue之电商管理系统电商系统之实现搜索功能
  7. dl,dt,dd怎么用
  8. HttpResponse 类
  9. 【重磅综述】长序列数据分析相关资源哪里找?一文读懂长序列测序数据分析的机遇与挑战!...
  10. chart控件做实时曲线显示_「Qt」利用QChart实现实时动态的曲线数据展示(进化版)
  11. cordova插件(github版)
  12. python机器人方向怎么学_学习如何使用 Python 构建你自己的 Twitter 机器人
  13. lua如何判断是否支持cookie_如何判断面部是否需要吸脂
  14. #include与#include的区别
  15. spring security退出方法
  16. antdesign 新增页面_ant design pro 新增页面
  17. 谁能谈谈国外软件行业的实际情况么?(全美“50大好差事” 软件工程师排名第一)...
  18. 机器学习——课后习题解答
  19. 物联网通信_闲聊协议
  20. 【LaTeX符号】条件独立与不独立符号

热门文章

  1. oracle database express database,安装Oracle Database Express Edition 11g时出现问题
  2. PHP自学笔记(基础语法篇)
  3. 计算机运算器发展趋势,2020计算器市场发展现状及及前景分析
  4. bzoj 2565 manacher
  5. Ensight后处理软件显示网格
  6. linux驱动面试题整理
  7. ceph monitor paxos算法
  8. 2018 Macbook pro 15(10.13.6)安装Nvidia 1070(Aorus Gaming Box)显卡驱动
  9. FFmpeg多媒体文件处理(ffmpeg打印音视频Meta信息)
  10. Matlab拟合工具箱的使用