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

简介: 使用OpenCV实现人脸图像卡通化

引言


通过前面的文章我们已经了解到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有了更加深入的了解,快来动手试试吧~

        相关文章
        |
        2月前
        |
        计算机视觉
        Opencv学习笔记(八):如何通过cv2读取视频和摄像头来进行人脸检测(jetson nano)
        如何使用OpenCV库通过cv2模块读取视频和摄像头进行人脸检测,并提供了相应的代码示例。
        133 1
        |
        2月前
        |
        计算机视觉
        Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
        这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
        595 0
        Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
        |
        3月前
        |
        算法 计算机视觉
        opencv图像形态学
        图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
        57 4
        |
        2月前
        |
        机器学习/深度学习 计算机视觉
        目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
        本文介绍了如何使用OpenCV进行特定区域的目标检测,包括人脸检测实例,展示了两种实现方法和相应的代码。
        91 1
        目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
        |
        3月前
        |
        存储 计算机视觉
        Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
        本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
        Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
        |
        4月前
        |
        算法 计算机视觉 Python
        python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
        该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
        python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
        WK
        |
        4月前
        |
        编解码 计算机视觉 Python
        如何在OpenCV中进行图像转换
        在OpenCV中,图像转换涉及颜色空间变换、大小调整及类型转换等操作。常用函数如`cvtColor`可实现BGR到RGB、灰度图或HSV的转换;`resize`则用于调整图像分辨率。此外,通过`astype`或`convertScaleAbs`可改变图像数据类型。对于复杂的几何变换,如仿射或透视变换,则可利用`warpAffine`和`warpPerspective`函数实现。这些技术为图像处理提供了强大的工具。
        WK
        135 1
        |
        6月前
        |
        算法 计算机视觉
        【Qt&OpenCV 图像的感兴趣区域ROI】
        【Qt&OpenCV 图像的感兴趣区域ROI】
        225 1
        |
        6月前
        |
        运维 算法 计算机视觉
        【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
        【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
        91 1
        |
        6月前
        |
        存储 编解码 算法
        【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
        【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
        118 0