python opencv创建图像_打开国庆的正确方式,教你用OpenCV-Python轻松生成微信国庆版头像...
原标题:打开国庆的正确方式,教你用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轻松生成微信国庆版头像...相关推荐
- 打开十一的正确方式,教你用OpenCV-Python轻松生成微信十一版头像
公众号[OpenCV学堂],致力于计算机视觉开发技术传播,原创技术文章200+的,涉及OpenCV开发.tensorflow开发.模型解析与训练.传统图像处理算法解析,对图像与视觉感兴趣的强烈推荐关注 ...
- opencv 创建图像_非艺术家的图像创建(OpenCV项目演练)
opencv 创建图像 This project stemmed from my predilection of the visual arts - as a computing student, I ...
- python批量检索文献_快解锁新姿势,教你如何用Python搞定文献搜索和科研图片!...
相比实验论文,发表SCI应该更让科研狗们重视和焦虑. 起初看到读博的同学发表SCI论文,心里面就已经酸了,后来「本科生发数篇 SCI」的新闻屡见不鲜,现在甚至连小学生都跑出来分一杯羹-- 前段时间,B ...
- python opencv创建图像_使用Python中OpenCV库创建一幅图片的RGB通道图片
我们知道,在使用PhotoShop进行图片的抠取.创建和存储选区.存储图像的色彩资料等复杂操作时,经常会用到一个功能,那就是"RGB"通道,它能从三原色角度对一幅图片进行精准处理. ...
- python指定数组大小_在python中创建指定大小的多维数组方式
python中创建指定大小的二维数组,有点像C++中进行动态申请内存创建数组,不过相比较而言,python中更为简单一些. 创建n行m列的二维数组: n = 2 m = 3 matrix = [Non ...
- 打开国庆的正确方式,用Python轻松生成国庆版头像
OpenCV轻松搞定,不信看内容 公众号[OpenCV学堂],致力于计算机视觉开发技术传播,原创技术文章200+的,涉及OpenCV开发.tensorflow开发.模型解析与训练.传统图像处理算法解析 ...
- python自己创建模块_创建并发布自己的python模块
python通过模块来共享组织代码,python不仅内置了丰富的标准库,而且python社区还贡献了大量的第三方模块,正是由于第三方模块大大扩展了python的应用领域,成就了如今python的江湖地 ...
- python怎么创建列表_用Python将一个列表分割成小列表的实例讲解 Python 如何创建一个带小数的列表...
python里有一个列表,列表里有几个小列表,小列表#冒泡排序:scoreList = [['a',98],['c',45],['b',70],['d',85],['h',85],['f',92],[ ...
- python 批量创建线程_【Python】批量创建线程
在<[Python]线程的创建.执行.互斥.同步.销毁>(点击打开链接)中介绍了Python中线程的使用,但是里面线程的创建,使用了很原始的方式,一行代码创建一条.其实,Python里是可 ...
最新文章
- 【VMCloud云平台】私有云门户第一朵Web云(一)
- 新5 年时间服务器从 0 到 200,一个创业公司的架构野蛮生长史头疼哈
- Java并发编程的基础-为什么要复位
- Python+Opencv寻找图像中最亮的区域
- golang 修改nginx配置文件_「系统架构」Nginx调优,不可错过的几点
- 前端学习(1897)vue之电商管理系统电商系统之实现搜索功能
- dl,dt,dd怎么用
- HttpResponse 类
- 【重磅综述】长序列数据分析相关资源哪里找?一文读懂长序列测序数据分析的机遇与挑战!...
- chart控件做实时曲线显示_「Qt」利用QChart实现实时动态的曲线数据展示(进化版)
- cordova插件(github版)
- python机器人方向怎么学_学习如何使用 Python 构建你自己的 Twitter 机器人
- lua如何判断是否支持cookie_如何判断面部是否需要吸脂
- #include与#include的区别
- spring security退出方法
- antdesign 新增页面_ant design pro 新增页面
- 谁能谈谈国外软件行业的实际情况么?(全美“50大好差事” 软件工程师排名第一)...
- 机器学习——课后习题解答
- 物联网通信_闲聊协议
- 【LaTeX符号】条件独立与不独立符号
热门文章
- oracle database express database,安装Oracle Database Express Edition 11g时出现问题
- PHP自学笔记(基础语法篇)
- 计算机运算器发展趋势,2020计算器市场发展现状及及前景分析
- bzoj 2565 manacher
- Ensight后处理软件显示网格
- linux驱动面试题整理
- ceph monitor paxos算法
- 2018 Macbook pro 15(10.13.6)安装Nvidia 1070(Aorus Gaming Box)显卡驱动
- FFmpeg多媒体文件处理(ffmpeg打印音视频Meta信息)
- Matlab拟合工具箱的使用