使用OpenCV實(shí)現(xiàn)人臉圖像卡通化的示例代碼
引言
通過前面的文章我們已經(jīng)了解到OpenCV 是一個(gè)用于計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)的開源 python 庫。它主要針對實(shí)時(shí)計(jì)算機(jī)視覺和圖像處理。它用于對圖像執(zhí)行不同的操作,這些操作使用不同的技術(shù)對圖像進(jìn)行轉(zhuǎn)換。在本文中,我們將實(shí)現(xiàn)使用OpenCV將人臉圖像卡通化。
讓我們從導(dǎo)入必需的庫開始!
import cv2 import numpy as np
第一次變換(卡通化)
在這個(gè)轉(zhuǎn)換中,我們將找到圖像的邊緣,并使用雙邊濾波器和位操作符制作一個(gè)卡通化的圖像。
# 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()
第二次變換(模糊圖像)
在第二次變換中,我們嘗試用一個(gè)邊緣保持濾波器來模糊圖像,并在邊緣上加入一個(gè)閾值。在這里我們使用的是高斯模糊。
#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()
第三次變換(風(fēng)格化)
在這一變換過程中,我們將運(yùn)用風(fēng)格化的手法,創(chuàng)造出形象的卡通效果。
cartoon_image = cv2.stylization(image, sigma_s=150, sigma_r=0.25) cv2.imshow('cartoon', cartoon_image) cv2.waitKey(0) cv2.destroyAllWindows()
第四次變換(鉛筆素描)
在這個(gè)變換中,我們將分別創(chuàng)建一個(gè)彩色和黑白的鉛筆素描草圖形象。
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()
總結(jié)
在本文中我們通過四次不同的變換將一個(gè)人臉圖像進(jìn)行了卡通化。通過這些變換,我們對OpenCV有了更加深入的了解,快來動手試試吧~
到此這篇關(guān)于使用OpenCV實(shí)現(xiàn)人臉圖像卡通化的示例代碼的文章就介紹到這了,更多相關(guān)OpenCV 人臉圖像卡通化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python設(shè)計(jì)模式之抽象工廠模式原理與用法詳解
這篇文章主要介紹了Python設(shè)計(jì)模式之抽象工廠模式,簡單講述了抽象工廠模式的概念、原理并結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)與使用抽象工廠模式的相關(guān)操作技巧,需要的朋友可以參考下2019-01-01Python3 selenium 實(shí)現(xiàn)QQ群接龍自動化功能
這篇文章主要介紹了Python3 selenium 實(shí)現(xiàn)QQ群接龍自動化功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04教你如何用Pytorch搭建數(shù)英混合驗(yàn)證碼圖片識別模型
大家都知道checkpoints存放的是模型文件,data存放的是數(shù)據(jù)集,本文給大家分享如何利用Pytorch搭建數(shù)英混合驗(yàn)證碼圖片識別模型包括普通卷積模塊,深度可分離卷積模塊,空間通道注意力模塊,殘差模塊,感興趣的朋友跟隨小編一起看看吧2024-04-04selenium如何定位span元素的實(shí)現(xiàn)
這篇文章主要介紹了selenium如何定位span元素的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01命令行運(yùn)行Python腳本時(shí)傳入?yún)?shù)的三種方式詳解
這篇文章主要介紹了命令行運(yùn)行Python腳本時(shí)傳入?yún)?shù)的三種方式詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10Python3進(jìn)行表格數(shù)據(jù)處理的示例詳解
數(shù)據(jù)處理是一個(gè)當(dāng)下非常熱門的研究方向,通過對于大型實(shí)際場景中的數(shù)據(jù)進(jìn)行建模,可以用于預(yù)測下一階段可能出現(xiàn)的情況。本文就來聊聊Python3進(jìn)行表格數(shù)據(jù)處理的相關(guān)操作,需要的可以參考一下2023-03-03