使用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实现的扫雷游戏实例代码
Aug 01 Python
Python3.x版本中新的字符串格式化方法
Apr 24 Python
使用Python对IP进行转换的一些操作技巧小结
Nov 09 Python
python模块之sys模块和序列化模块(实例讲解)
Sep 13 Python
Python语言实现将图片转化为html页面
Dec 06 Python
Python之Scrapy爬虫框架安装及简单使用详解
Dec 22 Python
python PyTorch预训练示例
Feb 11 Python
Python正则表达式实现简易计算器功能示例
May 07 Python
python分割一个文本为多个文本的方法
Jul 22 Python
Django框架教程之中间件MiddleWare浅析
Dec 29 Python
解决python对齐错误的方法
Jul 16 Python
Python  lambda匿名函数和三元运算符
Apr 19 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 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
Win7下手动安装apache2.2、php5.4笔记
2015/04/03 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
PHPMAILER实现PHP发邮件功能
2018/04/18 PHP
PHP实现统计代码行数小工具
2019/09/19 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
jQuery-ui中自动完成实现方法
2010/06/10 Javascript
JSDoc 介绍使用规范JsDoc的使用介绍
2011/02/12 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
jquery延迟加载外部js实现代码
2013/01/11 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
Bootstrap响应式侧边栏改进版
2016/09/17 Javascript
jquery实现点击页面回到顶部
2016/11/23 Javascript
jQuery展示表格点击变色、全选、删除
2017/01/05 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
vue 组件高级用法实例详解
2018/04/11 Javascript
微信小程序实现多选功能
2018/11/04 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
Python Web框架Tornado运行和部署
2020/10/19 Python
python爬虫之百度API调用方法
2017/06/11 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
英国Boots旗下太阳镜网站:Boots Designer Sunglasses
2018/07/07 全球购物
eDreams葡萄牙:全球最大的在线旅行社之一
2019/04/15 全球购物
搞笑获奖感言
2014/01/30 职场文书
师德师风学习材料
2014/12/19 职场文书
Redis数据结构之链表与字典的使用
2021/05/11 Redis
Nginx反向代理配置的全过程记录
2021/06/22 Servers
Node.js实现断点续传
2021/06/23 Javascript