Python-OpenCV 人脸图像卡通化
前言一、边缘检测和滤波二、使用步骤1.引入库2.处理图像3.展示结果 总结前言
OpenCV 提供了丰富的图像滤波和边缘检测的算法,可利用其为照片添加卡通效果,实现人脸图像卡通化。
思路是先做边缘检测得到图像的边缘,提炼出人物的主要轮廓,然后用双边滤波器做平滑处理。
一、边缘检测和滤波
中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,是一种邻域运算,在衰减噪声的同时能较好的保护图像的边缘。
拉普拉斯算子是一种二阶导数算子,可以满足不同方向的图像边缘检测。
Resize是opencv库中的一个函数,对图片进行缩放。
双边滤波是一种非线性的滤波方法,结合图像的空间邻近度和像素值相似度,对于低频信息进行较好的滤除,在衰减噪声的同时能较好的保护图像的边缘。
二、使用步骤
1.引入库
代码如下 :
import cv2 import pandas as pdimport numpy as np
2.处理图像
代码如下 :
# read imageimg=cv2.imread("Jessica.jpg")cv2.imshow("original", img)img1=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#median filtering blurred = cv2.medianBlur(img1,7)#Edge filteringblurred1 = cv2.Laplacian(blurred,cv2.CV_16S,ksize = 5)ret,blurred1=cv2.threshold(blurred1,80,255,cv2.THRESH_BINARY_INV)w,h=img.shape[0:2]img_test1 = cv2.resize(img, (0, 0), fx=0.5, fy=0.5, interpolation=cv2.INTER_LINEAR)cv2.imshow("resize",img_test1)#9 neighborhood diameter, two 75 are the standard deviation of spatial Gaussian function and the standard deviation of gray value similarity Gaussian functionblur = cv2.bilateralFilter(img_test1,9,75,75)cv2.imshow('bilateralFilter',blur)bigimg=cv2.resize(blur,(w,h),0,0,interpolation=cv2.INTER_LINEAR)cv2.imshow('bigimg',bigimg)blurred1 = cv2.Laplacian(blurred,cv2.CV_8U,ksize = 5)mask=cv2.resize(blurred1,(w, h))dst = cv2.bitwise_and(bigimg, bigimg, mask=mask)cv2.imshow('image_Cartoon',dst)#Window waitscv2.waitKey(0)#Destroy the window and exitcv2.destroyAllWindows()
3.展示结果
总结
本文简单介绍利用了OpenCV 为照片添加卡通效果,实现人脸图像卡通化。
如果觉得《【Python-OpenCV 人脸图像卡通化】》对你有帮助,请点赞、收藏,并留下你的观点哦!