基于Opencv的圖像卡通化實(shí)現(xiàn)代碼
OpenCV的全稱是:Open Source Computer Vision Library。OpenCV是一個基于(開源)發(fā)行的跨平臺計(jì)算機(jī)視覺庫,可以運(yùn)行在Linux、Windows和Mac OS操作系統(tǒng)上。它輕量級而且高效——由一系列 C 函數(shù)和少量 C++ 類構(gòu)成,同時提供了Python、Ruby、MATLAB等語言的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺方面的很多通用算法。
本文給大家介紹基于Opencv的圖像卡通化,主要工具是高斯濾波器、細(xì)節(jié)增強(qiáng)濾波器、雙邊濾波、拉普拉斯濾波器。
鉛筆素描效果
將輸入圖像灰度化后及逆行高斯濾波,其中由于高斯濾波服從正態(tài)分布,核數(shù)越大、越模糊。最后一步是將原始灰度圖像除以模糊后的灰度圖像。這樣可以得出兩個圖像中每個像素之間的變化率。模糊效果越強(qiáng),每個像素的值相對于其原點(diǎn)的變化就越大,因此,它使我們的鉛筆素描更加清晰。其中第一幅圖核數(shù)為25,第二幅圖核數(shù)為75。(領(lǐng)會除法運(yùn)用在此處的妙處)


import cv2
img=cv2.imread('bird.jpg')
cv2.imshow('bird',img)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Blur the image using Gaussian Blur
#高斯核服從正態(tài)分布,核數(shù)越大,越模糊
gray_blur = cv2.GaussianBlur(gray, (75, 75), 0)
# Convert the image into pencil sketch
cartoon = cv2.divide(gray, gray_blur, scale=250.0)
cv2.imshow('cartoon.jpg',cartoon)
cv2.waitKey()
cv2.destroyAllWindows()國畫效果
國畫效果:銳化圖像,平滑顏色以及增強(qiáng)邊緣效果。
1.將原圖像進(jìn)行中值濾波后進(jìn)行自適應(yīng)均值濾波后的邊緣圖像。
2.將原RGB圖像進(jìn)行基于細(xì)節(jié)增強(qiáng)濾波器的銳化下圖1。(當(dāng)把細(xì)節(jié)增強(qiáng)濾波器換為雙邊濾波,顯得更加平滑,下圖2)
3.將銳化后的圖像與邊緣圖像進(jìn)行按位與得到最終效果圖。


import cv2
img=cv2.imread('bird.jpg')
cv2.imshow('bird',img)
#convert the image into grayscale image
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#Blur the grayscale image with median blur中值濾波
gray_blur = cv2.medianBlur(gray, 3)
#Apply adaptive thresholding to detect edges檢測圖像邊緣
edges = cv2.adaptiveThreshold(gray_blur, 255, cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY, 9, 9)#自適應(yīng)均值濾波
#Sharpen the image銳化圖像
color = cv2.detailEnhance(img, sigma_s=5, sigma_r=0.5)
cv2.imshow('color',color)
#細(xì)節(jié)增強(qiáng)函數(shù) sigma_s控制著鄰域的大小,該鄰域的大小將被加權(quán)以替換圖像中的像素值。值越高,鄰域越大。這樣可以使圖像更平滑
#:如果要在平滑圖像時保留邊緣,這很重要。較小的值只會產(chǎn)生非常相似的顏色進(jìn)行平均(即平滑),而相差很大的顏色將保持不變
#Merge the colors of same images using "edges" as a mask
cartoon = cv2.bitwise_and(color, color, mask=edges)
cv2.imshow('cartoon',cartoon)
cv2.waitKey()
cv2.destroyAllWindows()抽象效果
拉普拉斯濾波器:通過對象內(nèi)部的灰度級和圖像背景強(qiáng)度來突出對象的邊緣

import cv2
img=cv2.imread('bird.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('img.jpg', img )
gray = cv2.medianBlur(gray, 3)
edges = cv2.Laplacian(gray, -1, ksize=5)
edges_inv = 255 - edges
dummy, cartoon = cv2.threshold(edges_inv, 0, 255, cv2.THRESH_BINARY)
cv2.imshow('cartoon.jpg', cartoon )
cv2.waitKey()
cv2.destroyAllWindows()到此這篇關(guān)于基于Opencv的圖像卡通化實(shí)現(xiàn)代碼的文章就介紹到這了,更多相關(guān)Opencv圖像卡通化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pycharm配置Anaconda環(huán)境的詳細(xì)圖文教程
PyCharm是一款很好用很流行的python編輯器,Anaconda通過管理工具包、開發(fā)環(huán)境、Python版本,大大簡化了你的工作流程,下面這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下Pycharm配置Anaconda環(huán)境的相關(guān)資料,需要的朋友可以參考下2023-02-02
python numpy和list查詢其中某個數(shù)的個數(shù)及定位方法
今天小編就為大家分享一篇python numpy和list查詢其中某個數(shù)的個數(shù)及定位方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
PyQt教程之自定義組件Switch?Button的實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了PyQt中如何實(shí)現(xiàn)自定義組件Switch?Button,文中的示例代碼簡潔易懂,具有一定的學(xué)習(xí)價值,感興趣的可以了解一下2023-05-05
使用Python在Word中插入圖片并文字環(huán)繞的方法
在Word文檔中插入圖片能夠提供更直觀的信息,插入圖片時,我們還可以調(diào)整圖片大小,以及設(shè)置合適的文字環(huán)繞方式,本文將提供兩種使用Python在Word文檔中插入圖片并設(shè)置文字環(huán)繞的方法,需要的朋友可以參考下2024-06-06

