最近一直想换个本人的卡通头像,拎着照片去问价钱,居然要收我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做一个头像相关推荐

  1. 使用OpenCV做一个人脸识别(Java)

    前言 当前很多博客实现人脸识别的大部分都是调用云厂家的接口,如百度,阿里云.以及我们乐橙开放平台也支持人脸识别等人工智能服务.这些都比较简单,会接开放平台,走接口请求基本上都掌握了.缺点就是有限制,收 ...

  2. 【无标题】用Qt+OpenCV做一个图像处理软件(灰度化)

    初入坑,有问题请指正. 首先,点击菜单栏插入选项,从文件目录中选取一张图片 . 附代码 void MainWindow::on_charu_triggered() {QString filename= ...

  3. 基于opencv做一个HSV的颜色选择器

    From sztu 自动化专业的小菜鸡. 本篇将介绍计算机视觉的HSV颜色选择器,基于python的opencv. 众所周知,每个物体的HSV值都是不同的,并且每个色系所在的HSV的颜色范围也都不同, ...

  4. python照片转卡通_用Python做一个网站,照片生成漫画头像,有这个网站就够了。...

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:Python进阶者 ( 想要学习Python?Pyth ...

  5. python和本人很像的卡通头像_用Python做一个网站,照片生成漫画头像,有这个网站就够了。...

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:Python进阶者 对于动漫,大家一定都不陌生,小编周 ...

  6. 用Python做一个网站,照片生成漫画头像,有这个网站就够了。

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:Python进阶者 ( 想要学习Python?Pyth ...

  7. opencv交通标志识别_教你从零开始做一个基于深度学习的交通标志识别系统

    教你从零开始做一个基于深度学习的交通标志识别系统 基于Yolo v3的交通标志识别系统及源码 自动驾驶之--交通标志识别 在本文章你可以学习到如何训练自己采集的数据集,生成模型,并用yolo v3算法 ...

  8. 用python做一个微信好友头像合集

    近日在学习python,在公众号上学到的一个很有意思的小项目,利用python将微信所有好友的头像做成拼图,效果如下. 看完了图,你可能想知道这个图咋做出来的,不会是我闲着无聊把把好友头像一个个保存下 ...

  9. OPENCV图像处理基础(四)用滑动条做一个按钮

    上一次说到播放一个视频,并附加一个滚动条,实现了让我们看起来像是在看视频,而不是在看连续播放图片的效果(其实是废话). 那滚动条有了,肯定有人要问有没有按钮啊.再此,可以肯定的说有!但!这个按钮和平常 ...

最新文章

  1. 无法显示验证码去掉html,后台登陆验证码无法显示
  2. 最长回文子序列(LPS)
  3. 5G会重新定义数据中心吗?
  4. [Java基础] sort方法--------排序的那些事
  5. 让iis支持下载apk,ipa文件
  6. 关于C3P0容错和自动重连特性的研究
  7. 「BZOJ2200」[Usaco2011 Jan] 道路和航线 - 最短路+拓扑排序
  8. 简易计算器 java_终于写出一个简单的计算器了
  9. php websocket应用实例,php使用websocket示例详解
  10. Fail2ban详细教程,解决网站被扫描、CC攻击、ssh暴力破解、防爬虫等问题
  11. Linux学习笔记(1)linux的开关机及重启
  12. 同比和与环比的计算公式
  13. 外接圆、内切圆半径公式及相应关系知识点总结
  14. Python爬虫方式抓取免费http代理IP
  15. 利用AVISPA证明D2D协议
  16. vue2+element使用插件导出全部表格数据
  17. 高数_第6章无穷级数__绝对收敛_条件收敛
  18. Web Api 调用时出现405错误解决方案
  19. 前端漂亮的字体 font-family
  20. 物联网在车联网中的应用

热门文章

  1. Apache ShardingSphere 毕业成为 Apache 顶级项目,系业界首个 Apache 分布式数据库中间件项目
  2. Java 网络编程之swing图形化QQ聊天室
  3. 2017高校计算机挑战赛,中国高校计算机大赛-网络技术挑战赛竞赛规程(2017年.PDF...
  4. C#入门-Person类
  5. Linux查看lib加载路径
  6. android平板哪个好用吗,明明知道iPad更实用,却坚持买安卓平板,是一种什么心态?...
  7. 解决STM32新增加函数出现Undefined symbol HAL_ADC_Init (referred from main.o). 问题
  8. vue网页预加载页面_页面预加载效果
  9. 微信小程序怎么打通视频号?只差一个自定义版交易组件
  10. GitHub 学生认证,申请 GitHub 学生包