如何利用OpenCV為Python中的圖像提供卡通效果?
正如你可能知道的,素描或創(chuàng)建一個(gè)卡通并不總是需要手動(dòng)完成。如今,許多應(yīng)用程序可以把你的照片變成卡通照片。但是如果我告訴你,你可以用幾行代碼創(chuàng)造屬于自己的效果呢?有一個(gè)名為OpenCV的庫(kù),它為計(jì)算機(jī)視覺(jué)應(yīng)用程序提供了一個(gè)公共基礎(chǔ)設(shè)施,并優(yōu)化了機(jī)器學(xué)習(xí)算法。它可以用來(lái)識(shí)別物體,檢測(cè)和產(chǎn)生高分辨率的圖像。本文,將向你展示如何利用OpenCV為Python中的圖像提供卡通效果。使用google colab來(lái)編寫(xiě)和運(yùn)行代碼。你可以在這里訪問(wèn)Google Colab中的完整代碼https://colab.research.google.com/drive/1lV5oJ_h(yuǎn)I8PsSV1WDVWWfL18-tMm4vnxe?usp=sharing要?jiǎng)?chuàng)造卡通效果,我們需要注意兩件事:邊緣和調(diào)色板。這就是照片和卡通的區(qū)別所在。為了調(diào)整這兩個(gè)主要部分,我們將經(jīng)歷四個(gè)主要步驟:加載圖像創(chuàng)建邊緣蒙版減少調(diào)色板結(jié)合邊緣蒙版和彩色圖像在開(kāi)始主要步驟之前,不要忘記導(dǎo)入notebook中所需的庫(kù),尤其是cv2和NumPy。import cv2
import numpy as np
# required if you use Google Colab
from google.colab.patches import cv2_imshow
from google.colab import files
1. 加載圖像第一個(gè)主要步驟是加載圖像。定義read_file函數(shù),其中包括cv2_imshow以在Google Colab中加載所選圖像。def read_file(filename):
img = cv2.imread(filename)
cv2_imshow(img)
return img
調(diào)用創(chuàng)建的函數(shù)來(lái)加載圖像。uploaded = files.upload()
filename = next(iter(uploaded))
img = read_file(filename)
我選擇了下面的圖片來(lái)轉(zhuǎn)化成卡通圖片。
2. 創(chuàng)建邊緣蒙版通常,卡通效果強(qiáng)調(diào)圖像中邊緣的厚度。我們可以使用 cv2.a(chǎn)daptiveThreshold() 函數(shù)檢測(cè)圖像中的邊緣?傊,我們可以將 egde_mask函數(shù)定義為:def edge_mask(img, line_size, blur_value):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray_blur = cv2.medianBlur(gray, blur_value)
edges = cv2.a(chǎn)daptiveThreshold(gray_blur, 255, cv2.ADAPTIVE_THRESH_M(jìn)EAN_C, cv2.THRESH_BINARY, line_size, blur_value)
return edges
在該函數(shù)中,我們將圖像轉(zhuǎn)換為灰度圖像。然后,利用cv2.medianBlur對(duì)模糊灰度圖像進(jìn)行去噪處理。模糊值越大,圖像中出現(xiàn)的黑色噪聲就越少。然后,應(yīng)用自適應(yīng)閾值函數(shù),定義邊緣的線條尺寸。較大的線條尺寸意味著圖像中強(qiáng)調(diào)的較厚邊緣。定義函數(shù)后,調(diào)用它并查看結(jié)果。line_size = 7
blur_value = 7
edges = edge_mask(img, line_size, blur_value)
cv2_imshow(edges)
3. 減少調(diào)色板照片和圖畫(huà)之間的主要區(qū)別——就顏色而言——是每一張照片中不同顏色的數(shù)量。圖畫(huà)的顏色比照片的顏色少。因此,我們使用顏色量化來(lái)減少照片中的顏色數(shù)目。色彩量化為了進(jìn)行顏色量化,我們采用OpenCV庫(kù)提供的K-Means聚類算法。為了在接下來(lái)的步驟中更容易實(shí)現(xiàn),我們可以如下定義color_quantization 函數(shù)。def color_quantization(img, k):
# Transform the image
data = np.float32(img).reshape((-1, 3))
# Determine criteria
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_M(jìn)AX_ITER, 20, 0.001)
# Implementing K-Means
ret, label, center = cv2.kmeans(data, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
center = np.uint8(center)
result = center[label.flatten()]
result = result.reshape(img.shape)
return result
我們可以調(diào)整k值來(lái)確定要應(yīng)用于圖像的顏色數(shù)。total_color = 9
img = color_quantization(img, total_color)
在本例中,我使用9作為圖像的k值。結(jié)果如下所示。
雙邊濾波器在進(jìn)行顏色量化之后,我們可以使用雙邊濾波器來(lái)降低圖像中的噪聲。它會(huì)給圖像帶來(lái)一點(diǎn)模糊和銳度降低的效果。blurred = cv2.bilateralFilter(img, d=7,
sigmaColor=200,sigmaSpace=200)
有三個(gè)參數(shù)可根據(jù)你的首選項(xiàng)進(jìn)行調(diào)整:d:每個(gè)像素鄰域的直徑sigmaColor:參數(shù)值越大,表示半等色區(qū)域越大。sigmaSpace:參數(shù)的值越大,意味著更遠(yuǎn)的像素將相互影響,只要它們的顏色足夠接近。
4. 結(jié)合邊緣蒙版和彩色圖像最后一步是將我們之前創(chuàng)建的邊緣蒙版與彩色處理圖像相結(jié)合。為此,請(qǐng)使用cv2.bitwise_and函數(shù)。cartoon = cv2.bitwise_and(blurred, blurred, mask=edges)
我們可以在下面看到原始照片的“卡通版”。
現(xiàn)在你可以開(kāi)始來(lái)創(chuàng)建你自己的卡通效果。除了在我們上面使用的參數(shù)中調(diào)整值之外,你還可以從OpenCV添加另一個(gè)函數(shù)來(lái)為你的照片提供特殊效果。代碼庫(kù)里還有很多東西我們可以探索。很高興嘗試!
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
10月31日立即下載>> 【限時(shí)免費(fèi)下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
-
即日-11.13立即報(bào)名>>> 【在線會(huì)議】多物理場(chǎng)仿真助跑新能源汽車
-
11月28日立即報(bào)名>>> 2024工程師系列—工業(yè)電子技術(shù)在線會(huì)議
-
12月19日立即報(bào)名>> 【線下會(huì)議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
即日-12.26火熱報(bào)名中>> OFweek2024中國(guó)智造CIO在線峰會(huì)
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書(shū)》
推薦專題
- 1 【一周車話】沒(méi)有方向盤(pán)和踏板的車,你敢坐嗎?
- 2 特斯拉發(fā)布無(wú)人駕駛車,還未迎來(lái)“Chatgpt時(shí)刻”
- 3 特斯拉股價(jià)大跌15%:Robotaxi離落地還差一個(gè)蘿卜快跑
- 4 馬斯克給的“驚喜”夠嗎?
- 5 大模型“新星”開(kāi)啟變現(xiàn)競(jìng)速
- 6 海信給AI電視打樣,12大AI智能體全面升級(jí)大屏體驗(yàn)
- 7 打完“價(jià)格戰(zhàn)”,大模型還要比什么?
- 8 馬斯克致敬“國(guó)產(chǎn)蘿卜”?
- 9 神經(jīng)網(wǎng)絡(luò),誰(shuí)是盈利最強(qiáng)企業(yè)?
- 10 比蘋(píng)果偉大100倍!真正改寫(xiě)人類歷史的智能產(chǎn)品降臨
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門(mén)市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市