溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Python將自拍轉換為卡通風格

發(fā)布時間:2021-10-19 15:46:21 來源:億速云 閱讀:273 作者:iii 欄目:編程語言

這篇文章主要介紹“怎么用Python將自拍轉換為卡通風格”,在日常操作中,相信很多人在怎么用Python將自拍轉換為卡通風格問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Python將自拍轉換為卡通風格”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

如今,畫素描或創(chuàng)作漫畫并不一定要手動完成,許多應用程序可以把你的照片轉換成卡通圖片。這并不像你想象中那么難,只需幾行代碼就能實現(xiàn)想要的效果。

有一個名為OpenCV的庫,為計算機視覺應用提供了通用基礎設施,并對機器學習算法進行了優(yōu)化。它可用于識別物體、檢測并生成高分辨率圖像。本教程將展示如何利用OpenCV在Python中賦予圖像卡通效果。教程中將使用Google  Colab來編寫并運行代碼。

怎么用Python將自拍轉換為卡通風格

要想制造出卡通效果,需要注意兩點:邊緣和調色板。這就是照片和卡通圖片之間的區(qū)別。要調整這兩個要點,將通過四個主要步驟:

  • 載入圖像

  • 創(chuàng)建邊緣蒙版

  • 減少調色板

  • 將邊緣蒙版與經(jīng)過顏色處理的圖像結合起來

在開始之前,別忘了在筆記本中導入所需的庫,尤其是cv2和NumPy。

defread_file(filename):                        img = cv2.imread(filename)                        cv2_imshow(img)                        return img

1. 載入圖像

第一個步驟是載入圖片。定義read_file函數(shù),其中包含cv2_imshow,來載入我們在Google Colab中選擇的圖片。

defread_file(filename):                        img = cv2.imread(filename)                        cv2_imshow(img)                        return img

調用創(chuàng)建的函數(shù)來載入圖像:

uploaded = files.upload() filename = next(iter(uploaded)) img = read_file(filename)

我選擇將下面這張圖變?yōu)榭ㄍ▓D片:

怎么用Python將自拍轉換為卡通風格

2. 創(chuàng)建邊緣蒙版

常見的卡通效果強調圖像中邊緣的厚度??梢酝ㄟ^cv2.adaptiveThreshold()  函數(shù)來檢測圖像中的邊緣。我們可以將egde_mask函數(shù)定義為:

defedge_mask(img, line_size,blur_value):                 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)                 gray_blur = cv2.medianBlur(gray,blur_value)                 edges = cv2.adaptiveThreshold(gray_blur, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, line_size,blur_value)                 return edges

在該函數(shù)中,我們將圖像轉換成灰度圖像,然后使用cv2.medianBlur來減少模糊的灰度圖像的噪點。模糊值越大,意味著圖像中出現(xiàn)的黑色噪點越少。接著,應用adaptiveThreshold函數(shù),定義邊緣的線條粗細。線條越粗,意味著圖像中強調的邊緣越厚。

定義完函數(shù)后,調用函數(shù)就可以看到結果了。

line_size = 7 blur_value = 7edges = edge_mask(img, line_size, blur_value) cv2_imshow(edges)

怎么用Python將自拍轉換為卡通風格

邊緣蒙版檢測

3. 減少調色板

在顏色方面,照片和素描的主要區(qū)別是它們各自的顏色數(shù)量。素描的顏色比照片少。因此,我們使用顏色量化來減少照片中的顏色數(shù)量。

要進行顏色量化,我們應用OpenCV庫提供的K均值聚類算法。為了在接下來的步驟中使用更方便,可以定義color_quantization函數(shù)如下:

defcolor_quantization(img, k):                         # Transform theimage                           data = np.float32(img).reshape((-1, 3))                                                 # Determinecriteria                           criteria = (cv2.TERM_CRITERIA_EPS+ cv2.TERM_CRITERIA_MAX_ITER, 20, 0.001)              # ImplementingK-Means                           ret, label, center = cv2.kmeans(data, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)                           center = np.uint8(center)                           result = center[label.flatten()]                           resultresult = result.reshape(img.shape)                           return result

可以調整k值來確定想要應用到圖像的顏色數(shù)量:

total_color = 9 img = color_quantization(img, total_color)

在本例中,圖像的k值設置為9。結果如下所示:

怎么用Python將自拍轉換為卡通風格

顏色量化后

完成顏色量化后,可以通過雙邊濾波來降低圖像中的噪點。這會使圖像變得稍微模糊,且銳度降低。

blurred = cv2.bilateralFilter(img, d=7, sigmaColor=200,sigmaSpace=200)

這里有三個參數(shù),你可以根據(jù)自己的喜好進行調整。

  • d —每個像素鄰域的直徑。

  • sigmaColor —該參數(shù)的值越大,表示半等色的區(qū)域越大。

  • sigmaSpace –該參數(shù)的值越大,意味著較遠的像素只要其顏色足夠接近,就會相互影響。

怎么用Python將自拍轉換為卡通風格

使用雙邊濾波后

4. 將邊緣蒙版與經(jīng)過顏色處理的圖像相結合

最后一步是將我們之前創(chuàng)建的邊緣蒙版與經(jīng)過顏色處理的圖像相結合。要做到這一點,需要使用cv2.bitwise_and函數(shù)。

cartoon = cv2.bitwise_and(blurred, blurred, mask=edges)

這就是原圖的“卡通版”:

怎么用Python將自拍轉換為卡通風格

最終效果

現(xiàn)在你可以開始創(chuàng)建屬于自己的卡通效果啦。除了調整我們上面使用的參數(shù)值,你還可以從OpenCV中添加另一個函數(shù)來給你的照片添加特殊效果,庫中還有很多可以探索的東西。嘗試愉快!

到此,關于“怎么用Python將自拍轉換為卡通風格”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI