使用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 EOL while scanning string literal问题解决方法
Sep 18 Python
Python2.x版本中maketrans()方法的使用介绍
May 19 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
May 16 Python
pandas删除行删除列增加行增加列的实现
Jul 06 Python
Python:slice与indices的用法
Nov 25 Python
Python3 读取Word文件方式
Feb 13 Python
python内打印变量之%和f的实例
Feb 19 Python
使用keras2.0 将Merge层改为函数式
May 23 Python
python创建文本文件的简单方法
Aug 30 Python
python 使用三引号时容易犯的小错误
Oct 21 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
php下安装配置fckeditor编辑器的方法
2011/03/02 PHP
php模板原理讲解
2013/11/13 PHP
Yii框架视图、视图布局、视图数据块操作示例
2019/10/14 PHP
jquery Mobile入门—外部链接切换示例代码
2013/01/08 Javascript
JS实现点击下载的小例子
2013/07/10 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
JavaScript生成二维码图片小结
2015/12/27 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
2016/10/09 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
基于jquery的on和click的区别详解
2018/01/15 jQuery
解决node修改后需频繁手动重启的问题
2018/05/13 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
2019/08/14 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
JS中==、===你分清楚了吗
2020/03/04 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
[01:00:59]VP VS VG Supermajor小组赛胜者组第二轮 BO3第二场 6.2
2018/06/03 DOTA
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
Python常用正则表达式符号浅析
2014/08/13 Python
一个月入门Python爬虫学习,轻松爬取大规模数据
2018/01/03 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
如何用Python进行时间序列分解和预测
2021/03/01 Python
HTML5利用约束验证API来检查表单的输入数据的代码实例
2016/12/20 HTML / CSS
丽笙酒店官方网站:Radisson Hotels
2019/05/07 全球购物
酷瑞网络科技面试题
2012/03/30 面试题
英语自我介绍演讲稿
2014/09/01 职场文书
MybatisPlus代码生成器的使用方法详解
2021/06/13 Java/Android
解析Redis Cluster原理
2021/06/21 Redis
Python图像处理库PIL详细使用说明
2022/04/06 Python
CSS 鼠标点击拖拽效果的实现代码
2022/12/24 HTML / CSS