[171108] 基於 Python OpenCV 圖像處理的特殊濾鏡(鉛筆畫、風格化、細節增強等)

原創內容,禁止轉載!


導讀:這是 Python OpenCV 圖像處理 專欄的第8篇文章。上一篇 [171107] 基於 Python OpenCV 霍夫圓檢測和極坐標變換的環形路徑文字識別(OCR)預處理主要介紹了OCR識別時對環狀路徑文字的預處理,主要時霍夫圓檢測和極坐標變換。這篇文章則主要介紹了使用 Python OpenCV 進行的一些濾鏡操作(如鉛筆畫、保邊去噪、風格化、細節增強等)。關於 Python OpenCV 處理的基礎知識,可以參考這篇文章 [171102] Python3 OpenCV3 圖像處理基礎(Python3 + Numpy + Matplotlib + OpenCV3 + ...)。更多文章,請查看 [171101] Python OpenCV 圖像處理專欄目錄。

自己挖的坑,怎麼著也得填完。。。n


本來想介紹一下使用 OpenCV 製作鉛筆畫呢,搜索了好多論文,發現了一篇挺有趣的:

[Domain Transform for Edge-Aware Image and Video Processing](http://inf.ufrgs.br/~eslgastal/DomainTransform/)n

主頁上掛出了文章實現的一些 「濾鏡」,挺「好看」的。

由於時間關係,沒有細讀。好吧,基本上沒怎麼看論文,因為我知道,這麼優秀的演算法一定會被 OpenCV 收錄的。 果不其然,在 OpenCV 里能夠找到相應的圖像處理函數API。

這些API都是封裝了經典演算法的,為廣大科研工作者和開發者提供便利,向原始的科研工作者和開源開發者表示致敬。

接下來只是展示一下函數說明和相應的結果,不做具體演算法分析(其實是我現在也不會。。。)

1. 鉛筆畫 cv2.pencilSketch

cv2.pencilSketch(src[, dst1[, dst2[, sigma_s[, sigma_r[, shade_factor]]]]]) -> dst1, dst2n@brief 製作鉛筆畫n@param src: 輸入的8位三通道BGR圖像n@param gray: 輸出的8位單通道灰度圖n@param dst2: 輸出的8位三通道等大小BGR圖像n@param sigma_s : 滑動窗口大小 (0~200)n@param sigma_r : 顏色不相似性度(0~1.0,不相似度越大代表濾波後顏色相似區域越大)n@param shade_factor : 0~0.1, 光照因子,控制圖像亮度。越大越亮。n

2. 風格化 cv2.stylization

cv2.stylization(src[, dst[, sigma_s[, sigma_r]]]) -> dstn@brief 製作風格化圖像 n必要參數與 cv2.prncilSketch 類似n

3. 細節增強 cv2.detailEnhance

cv2.detailEnhance(src[, dst[, sigma_s[, sigma_r]]]) -> dstn@brief 增強圖像細節 n其他是說明同上n

4. 保邊去噪 cv2.edgePreservingFilter

cv2.edgePreservingFilter(src[, dst[, flags[, sigma_s[, sigma_r]]]]) -> dstn@breif 保邊去噪n@param flags: 邊緣保持方法(經測試迭代比歸一化快,而效果相差不大)nRECURS_FILTER = 1 : 迭代濾波(recursive filtering)nNORMCONV_FILTER = 2: 歸一化卷積?(normalized convolution)nn其他參數同上n


接下來就是 「調包」時間了。。。

使用的是官網圖像,縮放為 1/3。 inf.ufrgs.br/~eslgastal

進行一系列處理後的圖像結果:

使用的代碼:

#!/usr/bin/python3n# 2017.11.08 23:40:15 CSTn# 2017.11.09 01:35:43 CSTnnimport cv2n## 讀取圖片nimg = cv2.imread("lamp.png")nn## 分別進行 鉛筆畫、風格化、細節增強、邊緣保持等處理ndst1_gray, dst1_color = cv2.pencilSketch(img, sigma_s = 50, sigma_r = 0.15, shade_factor = 0.04)ndst2 = cv2.stylization(img, sigma_s = 50, sigma_r = 0.15)ndst3 = cv2.detailEnhance(img, sigma_s = 50, sigma_r = 0.15)ndst4 = cv2.edgePreservingFilter(img, flags=1, sigma_s = 50, sigma_r = 0.15)nn## 顯示ncv2.imshow("source", img)ncv2.imshow("pencilSketchG", dst1_gray)ncv2.imshow("pencilSketchC", dst1_color)ncv2.imshow("stylization", dst2)ncv2.imshow("detailEnhance", dst3)ncv2.imshow("edgePreserving", dst4)ncv2.waitKey()ncv2.destroyAllWindows()n

沒有完結的完結,手動撒花~


推薦閱讀:

中科院醫工所智能醫療影像團隊公開「iMED-Origa650數據集」
實時多人的姿態估計【 CVPR'17 (Oral)】
簡單易懂的講解深度學習(入門系列之五)
【論文導讀】用一副眼鏡欺騙人臉識別系統
[行為檢測] CDC-Convolutional-De-Convolutional Networks for Precise Temporal Action Localization

TAG:OpenCV | 图像处理 | 计算机视觉 |