您好,登錄后才能下訂單哦!
本文小編為大家詳細(xì)介紹“Opencv怎么實現(xiàn)圖像卡通化效果”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Opencv怎么實現(xiàn)圖像卡通化效果”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。
OpenCV的全稱是:Open Source Computer Vision Library。OpenCV是一個基于(開源)發(fā)行的跨平臺計算機(jī)視覺庫,可以運行在Linux、Windows和Mac OS操作系統(tǒng)上。它輕量級而且高效——由一系列 C 函數(shù)和少量 C++ 類構(gòu)成,同時提供了Python、Ruby、MATLAB等語言的接口,實現(xiàn)了圖像處理和計算機(jī)視覺方面的很多通用算法。
將輸入圖像灰度化后及逆行高斯濾波,其中由于高斯濾波服從正態(tài)分布,核數(shù)越大、越模糊。最后一步是將原始灰度圖像除以模糊后的灰度圖像。這樣可以得出兩個圖像中每個像素之間的變化率。模糊效果越強(qiáng),每個像素的值相對于其原點的變化就越大,因此,它使我們的鉛筆素描更加清晰。其中第一幅圖核數(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()
國畫效果:銳化圖像,平滑顏色以及增強(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()
讀到這里,這篇“Opencv怎么實現(xiàn)圖像卡通化效果”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。