使用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数据结构树和二叉树简介
Apr 29 Python
Python实现二分法算法实例
Feb 02 Python
Python中set与frozenset方法和区别详解
May 23 Python
Python正则表达式分组概念与用法详解
Jun 24 Python
python的staticmethod与classmethod实现实例代码
Feb 11 Python
python读取csv文件并把文件放入一个list中的实例讲解
Apr 27 Python
pandas使用apply多列生成一列数据的实例
Nov 28 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
Jun 04 Python
python 实现return返回多个值
Nov 19 Python
Pycharm的Available Packages为空的解决方法
Sep 18 Python
python 用struct模块解决黏包问题
Nov 07 Python
Python爬虫新手入门之初学lxml库
Dec 20 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防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
PHP实现的AES加密、解密封装类与用法示例
2018/08/02 PHP
PHP实现微信对账单处理
2018/10/01 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
深入剖析JavaScript中的枚举功能
2014/03/06 Javascript
node.js中的console用法总结
2014/12/15 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
基于游标的分页接口实现代码示例
2018/11/12 Javascript
解决Layui数据表格显示无数据提示的问题
2019/11/14 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
基于asyncio 异步协程框架实现收集B站直播弹幕
2016/09/11 Python
Python编程生成随机用户名及密码的方法示例
2017/05/05 Python
Python获取SQLite查询结果表列名的方法
2017/06/21 Python
python数据结构之链表的实例讲解
2017/07/25 Python
使用Python操作excel文件的实例代码
2017/10/15 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
python opencv之分水岭算法示例
2018/02/24 Python
python 实现数组list 添加、修改、删除的方法
2018/04/04 Python
对numpy中shape的深入理解
2018/06/15 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
说说如何遍历Python列表的方法示例
2019/02/11 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
python机器学习包mlxtend的安装和配置详解
2019/08/21 Python
如何学习Python time模块
2020/06/03 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
J2EE的优越性主要表现在哪些方面
2016/03/28 面试题
生物科学系大学生的自我评价
2013/12/20 职场文书
大学校园毕业自我鉴定
2014/01/15 职场文书
手术室护士节演讲稿
2014/08/27 职场文书
2014年9.18纪念日演讲稿
2014/09/14 职场文书
老乡聚会通知
2015/04/23 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书