用opencv做一个头像
最近一直想换个本人的卡通头像,拎着照片去问价钱,居然要收我80块,想了想还是算了,自己动手做一个吧。
首先描绘一个边缘轮廓,然后再填充颜色。由于本人太好看,不太方便拿给大家展示,我还是拿张益达的图像做实例:
def main():img = cv2.imread("timg.jpg")img_copy = img# 灰度处理img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 中值滤波,去除噪声img_blur = cv2.medianBlur(img_gray, 5)# 自适应阈值二值化,通过阈值提取轮廓img_edge = cv2.adaptiveThreshold(img_blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,blockSize=9,C=3)# 将灰度图片变成 3 通道,用于后续合并img_edge = cv2.cvtColor(img_edge, cv2.COLOR_GRAY2BGR)cv2.namedWindow('张益达', cv2.WINDOW_AUTOSIZE)cv2.imshow('input_image', img_edge)cv2.waitKey(0)cv2.destroyWindows()if __name__ == '__main__':main()
得到如下图片:
嘿,对比原图来看,有点儿感觉了哈。
上面代码中,cv2.medianBlur(img, ksize)
是中值滤波,后面的参数ksize代表内核区域的边长,必须是大于1的奇数,该方法提取内核区域下所有像素的中值,并将中心元素替换位该中值。cv2.adaptiveThreshold(src, maxval, thresh_type, type, Block Size, C)
为自适应阈值二值化,其中:
src
为输入图片,而且只能输入单通道图像,也就是灰度图。
maxval
为当像素值超过了阈值,或者小于阈值(根据type决定)所赋予的值。
type
二值化操作的类型,与固定阈值函数相同,包含5种类型:cv2.THRESH_TOZERO;cv2.THRESH_BINARY;cv2.THRESH_TOZERO_INV; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC。
Block Size
:图片中分块的大小
C
为阈值计算方法中的常数项
就像画画一样,描绘好边缘后,接下来就是上色,我们只需要将原图片的颜色细致度降低即可。我们先用图像金字塔将分辨率降低,然后欧阳那个双边滤波去除噪声,平滑平面区域并保持边缘清晰。然后分辨率降低后图片会变小,因此最后要将图像放大为原来的大小。这部分代码如下:
for _ in range(2)# 降低分辨率img_copy = cv2.pyrDown(img_copy)
for _ in range(5):# 图像平滑,保留边缘,双边滤波img_copy = cv2.bilateralFilter(img_copy, d=9, sigmaColor=9, sigmaSpace=7)
img_copy = cv2.resize(img_copy, (img.shape[1], img.shape[0]),interpolation=cv2.INTER_CUBIC)
其中,cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]])
的参数如下:
d
过滤时周围每个像素领域的直径
sigmaColor
再color space中过滤sigma。参数越大,临近像素将会在越远的地方mix
sigmaSpace
在coordinate space中过滤sigma。参数越大,那些颜色足够相近的的颜色的影响越大。
提取出颜色后,我们将轮廓和颜色合并:
img_cartoon = cv2.bitwise_and(img_copy, img_edge)
cv2.bitwise_and()
是对二进制数据进行“与”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“与”操作:1&1=1,1&0=0,0&1=0,0&0=0
最后得到图像:
emmmm…感觉还可以用哈。
用opencv做一个头像相关推荐
- 使用OpenCV做一个人脸识别(Java)
前言 当前很多博客实现人脸识别的大部分都是调用云厂家的接口,如百度,阿里云.以及我们乐橙开放平台也支持人脸识别等人工智能服务.这些都比较简单,会接开放平台,走接口请求基本上都掌握了.缺点就是有限制,收 ...
- 【无标题】用Qt+OpenCV做一个图像处理软件(灰度化)
初入坑,有问题请指正. 首先,点击菜单栏插入选项,从文件目录中选取一张图片 . 附代码 void MainWindow::on_charu_triggered() {QString filename= ...
- 基于opencv做一个HSV的颜色选择器
From sztu 自动化专业的小菜鸡. 本篇将介绍计算机视觉的HSV颜色选择器,基于python的opencv. 众所周知,每个物体的HSV值都是不同的,并且每个色系所在的HSV的颜色范围也都不同, ...
- python照片转卡通_用Python做一个网站,照片生成漫画头像,有这个网站就够了。...
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:Python进阶者 ( 想要学习Python?Pyth ...
- python和本人很像的卡通头像_用Python做一个网站,照片生成漫画头像,有这个网站就够了。...
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:Python进阶者 对于动漫,大家一定都不陌生,小编周 ...
- 用Python做一个网站,照片生成漫画头像,有这个网站就够了。
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:Python进阶者 ( 想要学习Python?Pyth ...
- opencv交通标志识别_教你从零开始做一个基于深度学习的交通标志识别系统
教你从零开始做一个基于深度学习的交通标志识别系统 基于Yolo v3的交通标志识别系统及源码 自动驾驶之--交通标志识别 在本文章你可以学习到如何训练自己采集的数据集,生成模型,并用yolo v3算法 ...
- 用python做一个微信好友头像合集
近日在学习python,在公众号上学到的一个很有意思的小项目,利用python将微信所有好友的头像做成拼图,效果如下. 看完了图,你可能想知道这个图咋做出来的,不会是我闲着无聊把把好友头像一个个保存下 ...
- OPENCV图像处理基础(四)用滑动条做一个按钮
上一次说到播放一个视频,并附加一个滚动条,实现了让我们看起来像是在看视频,而不是在看连续播放图片的效果(其实是废话). 那滚动条有了,肯定有人要问有没有按钮啊.再此,可以肯定的说有!但!这个按钮和平常 ...
最新文章
- 无法显示验证码去掉html,后台登陆验证码无法显示
- 最长回文子序列(LPS)
- 5G会重新定义数据中心吗?
- [Java基础] sort方法--------排序的那些事
- 让iis支持下载apk,ipa文件
- 关于C3P0容错和自动重连特性的研究
- 「BZOJ2200」[Usaco2011 Jan] 道路和航线 - 最短路+拓扑排序
- 简易计算器 java_终于写出一个简单的计算器了
- php websocket应用实例,php使用websocket示例详解
- Fail2ban详细教程,解决网站被扫描、CC攻击、ssh暴力破解、防爬虫等问题
- Linux学习笔记(1)linux的开关机及重启
- 同比和与环比的计算公式
- 外接圆、内切圆半径公式及相应关系知识点总结
- Python爬虫方式抓取免费http代理IP
- 利用AVISPA证明D2D协议
- vue2+element使用插件导出全部表格数据
- 高数_第6章无穷级数__绝对收敛_条件收敛
- Web Api 调用时出现405错误解决方案
- 前端漂亮的字体 font-family
- 物联网在车联网中的应用
热门文章
- Apache ShardingSphere 毕业成为 Apache 顶级项目,系业界首个 Apache 分布式数据库中间件项目
- Java 网络编程之swing图形化QQ聊天室
- 2017高校计算机挑战赛,中国高校计算机大赛-网络技术挑战赛竞赛规程(2017年.PDF...
- C#入门-Person类
- Linux查看lib加载路径
- android平板哪个好用吗,明明知道iPad更实用,却坚持买安卓平板,是一种什么心态?...
- 解决STM32新增加函数出现Undefined symbol HAL_ADC_Init (referred from main.o). 问题
- vue网页预加载页面_页面预加载效果
- 微信小程序怎么打通视频号?只差一个自定义版交易组件
- GitHub 学生认证,申请 GitHub 学生包