您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Opencv怎么實現圖像卡通化效果”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Opencv怎么實現圖像卡通化效果”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
OpenCV的全稱是:Open Source Computer Vision Library。OpenCV是一個基于(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。
將輸入圖像灰度化后及逆行高斯濾波,其中由于高斯濾波服從正態分布,核數越大、越模糊。最后一步是將原始灰度圖像除以模糊后的灰度圖像。這樣可以得出兩個圖像中每個像素之間的變化率。模糊效果越強,每個像素的值相對于其原點的變化就越大,因此,它使我們的鉛筆素描更加清晰。其中第一幅圖核數為25,第二幅圖核數為75。(領會除法運用在此處的妙處)
import cv2 img=cv2.imread('bird.jpg') cv2.imshow('bird',img) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Blur the image using Gaussian Blur #高斯核服從正態分布,核數越大,越模糊 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.將原圖像進行中值濾波后進行自適應均值濾波后的邊緣圖像。
2.將原RGB圖像進行基于細節增強濾波器的銳化下圖1。(當把細節增強濾波器換為雙邊濾波,顯得更加平滑,下圖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)#自適應均值濾波 #Sharpen the image銳化圖像 color = cv2.detailEnhance(img, sigma_s=5, sigma_r=0.5) cv2.imshow('color',color) #細節增強函數 sigma_s控制著鄰域的大小,該鄰域的大小將被加權以替換圖像中的像素值。值越高,鄰域越大。這樣可以使圖像更平滑 #:如果要在平滑圖像時保留邊緣,這很重要。較小的值只會產生非常相似的顏色進行平均(即平滑),而相差很大的顏色將保持不變 #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()
拉普拉斯濾波器:通過對象內部的灰度級和圖像背景強度來突出對象的邊緣
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怎么實現圖像卡通化效果”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。