当前位置: 首页> 文章列表> 如何使用Python OpenCV实现人脸图像卡通化

如何使用Python OpenCV实现人脸图像卡通化

最新
2021-01-12 19:58:11 109
飞一样的编程
擅长邻域:Java,MySQL,Linux,nginx

技术小结:


前言:OpenCV 是一个用于计算机视觉和机器学习得开源 python 库。它主要针对实时计算机视觉和图像处理。它用于对图像执行不同得操作,这些操作使用不同得技术对图像进行转换。在本文中,我们将实现使用OpenCV将人脸图像卡通化。

让我们从导入必需得库开始!

import cv2import numpy as np

第一次变换(卡通化)

在这个转换中,我们将找到图像得边缘,并使用双边滤波器和位操作符制作一个卡通化得图像。
# Reading the Image image = cv2.imread("image1.jpg")# Finding the Edges of Imagegray = 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 imagecolor = 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 windowcv2.destroyAllWindows()

第二次变换(模糊图像)

在第二次变换中,我们尝试用一个边缘保持滤波器来模糊图像,并在边缘上加入一个阈值。在这里我们使用得是高斯模糊。
#convert to gray scalegrayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)#apply gaussian blurgrayImage = cv2.GaussianBlur(grayImage, (3, 3), 0)#detect edgesedgeImage = cv2.Laplacian(grayImage, -1, ksize=5)edgeImage = 255 - edgeImage#threshold imageret, edgeImage = cv2.threshold(edgeImage, 150, 255, cv2.THRESH_BINARY)#blur images heavily using edgePreservingFilteredgePreservingImage = cv2.edgePreservingFilter(image, flags=2, sigma_s=50, sigma_r=0.4)#create output matrixoutput =np.zeros(grayImage.shape)#combine cartoon image and edges imageoutput = 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 windowcv2.destroyAllWindows()

第三次变换(风格化)

在这一变换过程中,我们将运用风格化得手法,创造出形象得卡通效果。
cartoon_image = cv2.stylization(image, sigma_s=150, sigma_r=0.25)  cv2.imshow('cartoon', cartoon_image)  cv2.waitKey(0)  cv2.destroyAllWindows()
第四次变换(铅笔素描)

在这个变换中,我们将分别创建一个彩色和黑白得铅笔素描草图形象。
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()

cv2.imshow('pencil', cartoon_image2) cv2.waitKey() cv2.destroyAllWindows()

总结

在本文中我们通过四次不同得变换将一个人脸图像进行了卡通化。通过这些变换,我们对OpenCV有了更加深入得了解,快来动手试试吧~
行,今天就给大家分享到这里吧,您的一份支持就是我最大的动力,最后打个小广告,我们程序员在学习和工作中或多或少会遇到一些比较棘手的问题,也就所谓的一时半会解决不了的bug,可以来杰凡IT问答平台上提问,平台上大佬很多可以快速给你一对一解决问题,有需要的朋友可以去关注下,平台网址: https://www.jf3q.com

写的很好呢,我要分享哦!

此处可发布评论

    暂无评论
    联系大神 有偿问答

    榜上有名--赚钱榜

    第一时间了解动态

    关注我们