使用OpenCV實現人臉圖像卡通化

歡迎關注 “小白玩轉Python”,發現更多 “有趣”

引言

通過前面的文章我們已經瞭解到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有了更加深入的瞭解,快來動手試試吧~

·  END  ·

HAPPY LIFE

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章