飞道的博客

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

383人阅读  评论(0)

欢迎关注 “小白玩转Python”,发现更多 “有趣”

引言

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

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


   
  1. import cv2
  2. import numpy as np

第一次变换(卡通化)

在这个转换中,我们将找到图像的边缘,并使用双边滤波器和位操作符制作一个卡通化的图像。


   
  1. # Reading the Image
  2. image = cv2.imread( "image1.jpg")
  3. # Finding the Edges of Image
  4. gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  5. gray = cv2.medianBlur(gray, 7)
  6. edges = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 9, 10)
  7. # Making a Cartoon of the image
  8. color = cv2.bilateralFilter(image, 12, 250, 250)
  9. cartoon = cv2.bitwise_and(color, color, mask=edges)
  10. #Visualize the cartoon image
  11. cv2.imshow( "Cartoon", cartoon)
  12. cv2.waitKey(0) # "0" is Used to close the image window
  13. cv2.destroyAllWindows()

第二次变换(模糊图像)

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


   
  1. #convert to gray scale
  2. grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  3. #apply gaussian blur
  4. grayImage = cv2.GaussianBlur(grayImage, (3, 3), 0)
  5. #detect edges
  6. edgeImage = cv2.Laplacian(grayImage, -1, ksize=5)
  7. edgeImage = 255 - edgeImage
  8. #threshold image
  9. ret, edgeImage = cv2.threshold(edgeImage, 150, 255, cv2.THRESH_BINARY)
  10. #blur images heavily using edgePreservingFilter
  11. edgePreservingImage = cv2.edgePreservingFilter(image, flags=2, sigma_s=50, sigma_r=0.4)
  12. #create output matrix
  13. output =np.zeros(grayImage.shape)
  14. #combine cartoon image and edges image
  15. output = cv2.bitwise_and(edgePreservingImage, edgePreservingImage, mask=edgeImage)
  16. #Visualize the cartoon image
  17. cv2.imshow( "Cartoon", output)
  18. cv2.waitKey(0) # "0" is Used to close the image window
  19. cv2.destroyAllWindows()

第三次变换(风格化)

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


   
  1. cartoon_image = cv2.stylization(image, sigma_s=150, sigma_r=0.25)
  2. cv2.imshow('cartoon', cartoon_image)
  3. cv2.waitKey(0)
  4. cv2.destroyAllWindows()

第四次变换(铅笔素描)

在这个变换中,我们将分别创建一个彩色和黑白的铅笔素描草图形象。


   
  1. cartoon_image1, cartoon_image2 = cv2.pencilSketch(image, sigma_s= 60, sigma_r= 0.5, shade_factor= 0.02)
  2. cv2.imshow( 'pencil', cartoon_image1)
  3. cv2.waitKey()
  4. cv2.destroyAllWindows()


   
  1. cv2.imshow( 'pencil', cartoon_image2)
  2. cv2.waitKey()
  3. cv2.destroyAllWindows()

总结

在本文中我们通过四次不同的变换将一个人脸图像进行了卡通化。通过这些变换,我们对OpenCV有了更加深入的了解,快来动手试试吧~

·  END  ·

HAPPY LIFE


转载:https://blog.csdn.net/weixin_38739735/article/details/111878539
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场