当前位置 博文首页 > 文章内容

    使用OpenCV实现人脸图像卡通化的示例代码

    作者:shunshunshun18 栏目:未分类 时间:2021-01-15 14:44:52

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    引言

    通过前面的文章我们已经了解到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()

    第二次变换(模糊图像)

    在第二次变换中,我们尝试用一个边缘保持滤波器来模糊图像,并在边缘上加入一个阈值。在这里我们使用的是高斯模糊。

    #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()

    第三次变换(风格化)

    在这一变换过程中,我们将运用风格化的手法,创造出形象的卡通效果。

    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有了更加深入的了解,快来动手试试吧~