使用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多线程爬虫简单示例
Mar 04 Python
python+mongodb数据抓取详细介绍
Oct 25 Python
python最长回文串算法
Jun 04 Python
对Python中实现两个数的值交换的集中方法详解
Jan 11 Python
浅谈Pandas Series 和 Numpy array中的相同点
Jun 28 Python
用python的turtle模块实现给女票画个小心心
Nov 23 Python
python实现高斯投影正反算方式
Jan 17 Python
pytorch实现seq2seq时对loss进行mask的方式
Feb 18 Python
Python数据相关系数矩阵和热力图轻松实现教程
Jun 16 Python
python中怎么表示空值
Jun 19 Python
python 解决selenium 中的 .clear()方法失效问题
Sep 01 Python
Python判断变量是否是None写法代码实例
Oct 09 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 DOMElement 操作xml 文档的实现代码
2013/05/10 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
用php代码限制国内IP访问我们网站
2015/09/26 PHP
PHP注释语法规范与命名规范详解篇
2018/01/21 PHP
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
js监听键盘事件的方法_原生和jquery的区别详解
2016/10/10 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
VUE利用vuex模拟实现新闻点赞功能实例
2017/06/28 Javascript
vue + vuex todolist的实现示例代码
2018/03/09 Javascript
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
2019/04/30 Javascript
React传值 组件传值 之间的关系详解
2019/08/26 Javascript
微信小程序实现列表滚动头部吸顶的示例代码
2020/07/12 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
跟老齐学Python之for循环语句
2014/10/02 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
python 字符串和整数的转换方法
2018/06/25 Python
flask中的wtforms使用方法
2018/07/21 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
Python运行异常管理解决方案
2020/03/09 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
CSS3支持IE6, 7, and 8的边框border属性
2012/12/28 HTML / CSS
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
Nisbets爱尔兰:英国最大的厨房和餐饮设备供应商
2019/01/26 全球购物
应届生护士求职信
2013/11/01 职场文书
校园十大歌手策划书
2014/02/01 职场文书
临时租车协议范本
2014/09/23 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
党的群众路线教育实践活动学习计划
2014/11/03 职场文书
论文评审意见
2015/06/05 职场文书
Python必备技巧之字符数据操作详解
2022/03/23 Python
Python中itertools库的四个函数介绍
2022/04/06 Python