使用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抓取百度首页的方法
May 19 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
Aug 30 Python
Python引用传值概念与用法实例小结
Oct 07 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
Jun 13 Python
Python常见排序操作示例【字典、列表、指定元素等】
Aug 15 Python
使用python脚本自动创建pip.ini配置文件代码实例
Sep 20 Python
用python中的matplotlib绘制方程图像代码
Nov 21 Python
Python对称的二叉树多种思路实现方法
Feb 28 Python
Selenium常见异常解析及解决方案示范
Apr 10 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
Jun 24 Python
python简单实现插入排序实例代码
Dec 16 Python
浅谈Python中的函数(def)及参数传递操作
May 25 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
coreseek 搜索英文的问题详解
2013/06/08 PHP
如何用C语言编写PHP扩展的详解
2013/06/13 PHP
php自动给网址加上链接的方法
2015/06/02 PHP
新手入门常用代码集锦
2007/01/11 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
2016/05/31 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
2016/07/06 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
2017/12/23 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
openlayers4实现点动态扩散
2020/08/17 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
深入理解Django的中间件middleware
2018/03/14 Python
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
详解python单元测试框架unittest
2018/07/02 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
OpenCV 轮廓检测的实现方法
2019/07/03 Python
Python list与NumPy array 区分详解
2019/11/06 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
YOOX美国官方网站:全球著名的多品牌时尚网络概念店
2016/09/11 全球购物
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
Anya Hindmarch官网:奢侈设计师手袋及配饰
2018/11/15 全球购物
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
2015年光棍节活动总结
2015/03/24 职场文书
政府会议通知范文
2015/04/15 职场文书
公司年会晚会开幕词
2019/04/02 职场文书
分析Netty直接内存原理及应用
2021/06/14 Java/Android