使用OpenCV实现人脸图像卡通化的示例代码


Posted in Python onJanuary 15, 2021

引言

通过前面的文章我们已经了解到OpenCV 是一个用于计算机视觉和机器学习的开源 python 库。它主要针对实时计算机视觉和图像处理。它用于对图像执行不同的操作,这些操作使用不同的技术对图像进行转换。在本文中,我们将实现使用OpenCV将人脸图像卡通化。

让我们从导入必需的库开始!

import cv2
import numpy as np

第一次变换(卡通化)

在这个转换中,我们将找到图像的边缘,并使用双边滤波器和位操作符制作一个卡通化的图像。

# Reading the Image 
image = cv2.imread("image1.jpg")
# Finding the Edges of Image
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
gray = cv2.medianBlur(gray, 7) 
edges = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 9, 10)
# Making a Cartoon of the image
color = cv2.bilateralFilter(image, 12, 250, 250) 
cartoon = cv2.bitwise_and(color, color, mask=edges)
#Visualize the cartoon image 
cv2.imshow("Cartoon", cartoon) 
cv2.waitKey(0) # "0" is Used to close the image window
cv2.destroyAllWindows()

使用OpenCV实现人脸图像卡通化的示例代码

第二次变换(模糊图像)

在第二次变换中,我们尝试用一个边缘保持滤波器来模糊图像,并在边缘上加入一个阈值。在这里我们使用的是高斯模糊。

#convert to gray scale
grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#apply gaussian blur
grayImage = cv2.GaussianBlur(grayImage, (3, 3), 0)
#detect edges
edgeImage = cv2.Laplacian(grayImage, -1, ksize=5)
edgeImage = 255 - edgeImage
#threshold image
ret, edgeImage = cv2.threshold(edgeImage, 150, 255, cv2.THRESH_BINARY)
#blur images heavily using edgePreservingFilter
edgePreservingImage = cv2.edgePreservingFilter(image, flags=2, sigma_s=50, sigma_r=0.4)
#create output matrix
output =np.zeros(grayImage.shape)
#combine cartoon image and edges image
output = cv2.bitwise_and(edgePreservingImage, edgePreservingImage, mask=edgeImage)
#Visualize the cartoon image 
cv2.imshow("Cartoon", output) 
cv2.waitKey(0) # "0" is Used to close the image window
cv2.destroyAllWindows()

使用OpenCV实现人脸图像卡通化的示例代码

第三次变换(风格化)

在这一变换过程中,我们将运用风格化的手法,创造出形象的卡通效果。

cartoon_image = cv2.stylization(image, sigma_s=150, sigma_r=0.25) 
cv2.imshow('cartoon', cartoon_image) 
cv2.waitKey(0) 
cv2.destroyAllWindows()

使用OpenCV实现人脸图像卡通化的示例代码

第四次变换(铅笔素描)

在这个变换中,我们将分别创建一个彩色和黑白的铅笔素描草图形象。

cartoon_image1, cartoon_image2 = cv2.pencilSketch(image, sigma_s=60, sigma_r=0.5, shade_factor=0.02) 
cv2.imshow('pencil', cartoon_image1) 
cv2.waitKey() 
cv2.destroyAllWindows()

使用OpenCV实现人脸图像卡通化的示例代码

cv2.imshow('pencil', cartoon_image2)  
cv2.waitKey()  
cv2.destroyAllWindows()

使用OpenCV实现人脸图像卡通化的示例代码

总结

在本文中我们通过四次不同的变换将一个人脸图像进行了卡通化。通过这些变换,我们对OpenCV有了更加深入的了解,快来动手试试吧~

到此这篇关于使用OpenCV实现人脸图像卡通化的示例代码的文章就介绍到这了,更多相关OpenCV 人脸图像卡通化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python装饰器使用方法实例
Nov 21 Python
Python语言的12个基础知识点小结
Jul 10 Python
python开发之字符串string操作方法实例详解
Nov 12 Python
Python中set与frozenset方法和区别详解
May 23 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 Python
python PyTorch预训练示例
Feb 11 Python
Python subprocess模块常见用法分析
Jun 12 Python
Django 外键的使用方法详解
Jul 19 Python
Python合并2个字典成1个新字典的方法(9种)
Dec 19 Python
基于spring boot 日志(logback)报错的解决方式
Feb 20 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
Feb 24 Python
Python采集壁纸并实现炫轮播
Apr 30 Python
Pycharm 解决自动格式化冲突的设置操作
Jan 15 #Python
pycharm 配置svn的图文教程(手把手教你)
Jan 15 #Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
Jan 15 #Python
pycharm 如何取消连按两下shift出现的全局搜索
Jan 15 #Python
使用Django的JsonResponse返回数据的实现
Jan 15 #Python
浅析Python打包时包含静态文件处理方法
Jan 15 #Python
pycharm 关闭search everywhere的解决操作
Jan 15 #Python
You might like
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
jquery easyui combobox模糊过滤(示例代码)
2013/11/30 Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
2014/06/24 Javascript
javascript里使用php代码实例
2014/12/13 Javascript
jQuery中:has选择器用法实例
2014/12/30 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
轻松实现Bootstrap图片轮播
2020/04/20 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
微信小程序 同步请求授权的详解
2017/08/04 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
Element-ui table中过滤条件变更表格内容的方法
2018/03/02 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
vue微信分享到朋友圈 vue微信发送给好友
2018/11/28 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
Python模拟登录12306的方法
2014/12/30 Python
深入理解NumPy简明教程---数组1
2016/12/17 Python
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
python 实现检验33品种数据是否是正态分布
2019/12/09 Python
Python 中如何实现参数化测试的方法示例
2019/12/10 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
浅谈keras 模型用于预测时的注意事项
2020/06/27 Python
Python如何定义接口和抽象类
2020/07/28 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
2021/01/05 Python
Boden英国官网:英国知名原创时装品牌
2018/11/06 全球购物
大学生求职工作的自我评价
2014/02/13 职场文书
效能监察建议书
2014/05/19 职场文书
青年志愿者活动方案
2014/08/17 职场文书
个人诉讼委托书范本
2014/10/17 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
感恩信:写给爸爸妈妈的一封感谢信
2019/09/12 职场文书