使用OpenCV實現人臉影象卡通化的示例程式碼
阿新 • • 發佈:2021-01-17
引言
通過前面的文章我們已經瞭解到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,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有了更加深入的瞭解,快來動手試試吧~
到此這篇關於使用OpenCV實現人臉影象卡通化的示例程式碼的文章就介紹到這了,更多相關OpenCV 人臉影象卡通化內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!