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


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()國畫效果
國畫效果:銳化圖像,平滑顏色以及增強邊緣效果。
1.將原圖像進行中值濾波后進行自適應(yīng)均值濾波后的邊緣圖像。
2.將原RGB圖像進行基于細節(jié)增強濾波器的銳化下圖1。(當把細節(jié)增強濾波器換為雙邊濾波,顯得更加平滑,下圖2)
3.將銳化后的圖像與邊緣圖像進行按位與得到最終效果圖。


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)
#細節(jié)增強函數(shù) sigma_s控制著鄰域的大小,該鄰域的大小將被加權(quán)以替換圖像中的像素值。值越高,鄰域越大。這樣可以使圖像更平滑
#:如果要在平滑圖像時保留邊緣,這很重要。較小的值只會產(chǎ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)部的灰度級和圖像背景強度來突出對象的邊緣

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的圖像卡通化實現(xiàn)代碼的文章就介紹到這了,更多相關(guān)Opencv圖像卡通化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python網(wǎng)絡(luò)應(yīng)用開發(fā)知識點淺析
在本篇內(nèi)容中小編給學習python的朋友們整理了關(guān)于網(wǎng)絡(luò)應(yīng)用開發(fā)的相關(guān)知識點以及實例內(nèi)容,需要的朋友們參考下。2019-05-05
Python實現(xiàn)計算函數(shù)或程序執(zhí)行時間
在Python程序的開發(fā)過程中,一些程序需要獲取函數(shù)或程序的開始時間、結(jié)束時間和時間間隔等內(nèi)容用來分析和處理內(nèi)容。本文就來聊聊具體實現(xiàn)方法2023-02-02
python通過安裝itchat包實現(xiàn)微信自動回復收到的春節(jié)祝福
這篇文章主要介紹了python通過安裝itchat包實現(xiàn)微信自動回復收到的春節(jié)祝福,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧2020-01-01

