国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現將照片變成卡通圖片的方法【基于opencv】

2020-02-22 22:53:18
字體:
來源:轉載
供稿:網友

本文實例講述了Python實現將照片變成卡通圖片的方法。分享給大家供大家參考,具體如下:

之前的文章介紹了使用Photoshop將照片變成卡通圖片,今次介紹用代碼來實現這項任務,可以就此探查各種濾鏡的內部機制。

制作環境:Windows10,Python2.7,Anaconda

任務描述:將D盤某文件夾中的所有圖片使用代碼進行卡通化,然后保存到另一文件夾中。

如前文所述,卡通化的關鍵是強化邊緣與減少色彩,所以使用Photoshop進行卡通化的時候就使用了照亮邊緣和干筆畫的濾鏡來處理。使用代碼處理圖片的時候也是在對邊緣和色彩上做文章。以下使用OpenCV庫來對照片處理,大致分為四步來完成。

1. 應用雙邊濾波器來減少圖像的色彩
2. 將彩色圖像轉換為灰度,應用中值濾波器減少圖像中的圖像噪點
3. 使用自適應閾值處理灰度圖像創建輪廓
4. 將來自步驟1的彩色圖像與來自步驟3的輪廓疊加

第1步:減少圖像色彩

因為雙邊濾波器平滑平坦區域同時能保持邊緣清晰,所以很適合于將RGB圖像轉換為卡通。雖然速度好像慢一些一個技巧是重復(例如,通過num_bilateral = 7七次)應用小雙邊濾波器,而不是只用一次大雙邊濾波器。

import cv2num_down = 2  # 縮減像素采樣的數目num_bilateral = 7 # 定義雙邊濾波的數目img_rgb = cv2.imread("img_example.jpg")# 用高斯金字塔降低取樣img_color = img_rgbfor _ in xrange(num_down): img_color = cv2.pyrDown(img_color)# 重復使用小的雙邊濾波代替一個大的濾波for _ in xrange(num_bilateral): img_color = cv2.bilateralFilter(img_color, d=9,         sigmaColor=9,         sigmaSpace=7)# 升采樣圖片到原始大小for _ in xrange(num_down): img_color = cv2.pyrUp(img_color)

cv2.bilateralFilter中的三個參數控制像素鄰域的直徑(d)和顏色空間中的濾波器的標準偏差(sigmaColor)以及坐標空間(sigmaSpace)。

第2步:轉換為灰度,并使用中值濾波器減少噪點

OpenCV在邊緣檢測方面提供了多種選擇,自適應閾值處理的優點是可以檢測圖像的每個小領域中最突出的特征,獨立于圖像的整體屬性。

應用中值濾波器減少圖像的色彩。將原始的彩色圖片轉換為灰度圖片,接著應用中值模糊來減少灰度圖像中的噪聲。

# 轉換為灰度并使其產生中等的模糊img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2GRAY)img_blur = cv2.medianBlur(img_gray, 7)

第3步:創建輪廓

在降噪之后,就可以安全地應用自適應閾值來創建輪廓。 即使存在一些圖像噪聲,blockSize = 9的cv2.ADAPTIVE_THRESH_MEAN_C算法也會確保將閾值應用于9x9鄰域的平均值減去C = 2。

# 檢測到邊緣并且增強其效果img_edge = cv2.adaptiveThreshold(img_blur, 255,         cv2.ADAPTIVE_THRESH_MEAN_C,         cv2.THRESH_BINARY,         blockSize=9,         C=2)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绵竹市| 方正县| 德江县| 临夏市| 利川市| 格尔木市| 瑞丽市| 城口县| 秀山| 交口县| 桃江县| 东兰县| 溆浦县| 望奎县| 临城县| 泸西县| 雷州市| 仪征市| 沁源县| 英吉沙县| 澄迈县| 高台县| 砀山县| 遵化市| 上思县| 且末县| 岳阳县| 论坛| 房山区| 金寨县| 南靖县| 抚远县| 克东县| 澄江县| 会泽县| 循化| 扎鲁特旗| 获嘉县| 蒲江县| 获嘉县| 漠河县|