最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)將照片變成卡通圖片的方法【基于opencv】

 更新時間:2018年01月17日 10:32:56   作者:zc米蘭  
這篇文章主要介紹了Python實現(xiàn)將照片變成卡通圖片的方法,涉及Python基于opencv庫進(jìn)行圖片處理的相關(guān)操作技巧,需要的朋友可以參考下

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

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

制作環(huán)境:Windows10,Python2.7,Anaconda

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

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

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

第1步:減少圖像色彩

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

import cv2
num_down = 2  # 縮減像素采樣的數(shù)目
num_bilateral = 7 # 定義雙邊濾波的數(shù)目
img_rgb = cv2.imread("img_example.jpg")
# 用高斯金字塔降低取樣
img_color = img_rgb
for _ in xrange(num_down):
 img_color = cv2.pyrDown(img_color)
# 重復(fù)使用小的雙邊濾波代替一個大的濾波
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中的三個參數(shù)控制像素鄰域的直徑(d)和顏色空間中的濾波器的標(biāo)準(zhǔn)偏差(sigmaColor)以及坐標(biāo)空間(sigmaSpace)。

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

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

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

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

第3步:創(chuàng)建輪廓

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

# 檢測到邊緣并且增強(qiáng)其效果
img_edge = cv2.adaptiveThreshold(img_blur, 255,
         cv2.ADAPTIVE_THRESH_MEAN_C,
         cv2.THRESH_BINARY,
         blockSize=9,
         C=2)

第4步:合并輪廓與彩色圖片

最后一步是將經(jīng)處理的彩色圖像(img_color)與邊緣掩碼(img_edge)組合。至此,一個可以卡通化圖片的原始代碼就寫好了。圖片效果有點理工的審美,不夠文藝,效果上輸給了Photoshop,但是在效率上扳回一城。

# 轉(zhuǎn)換回彩色圖像
img_edge = cv2.cvtColor(img_edge, cv2.COLOR_GRAY2RGB)
img_cartoon = cv2.bitwise_and(img_color, img_edge)
# 顯示圖片
cv2.imshow("cartoon", img_cartoon)

最后將上述代碼封裝成函數(shù)。導(dǎo)入python的os模塊來方便文件處理。

# -*- coding: utf-8 -*-
import cv2
import os
def cartoonise(picture_name):
 imgInput_FileName = picture_name
 imgOutput_FileName = "D:\pythonpractice\CartoonImage\cartoon" + picture_name
 num_down = 2   #縮減像素采樣的數(shù)目
 num_bilateral = 7 #定義雙邊濾波的數(shù)目
 img_rgb = cv2.imread(imgInput_FileName)  #讀取圖片
 #用高斯金字塔降低取樣
 img_color = img_rgb
 for _ in xrange(num_down):
  img_color = cv2.pyrDown(img_color)
 #重復(fù)使用小的雙邊濾波代替一個大的濾波
 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)
 #轉(zhuǎn)換為灰度并且使其產(chǎn)生中等的模糊
 img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2GRAY)
 img_blur = cv2.medianBlur(img_gray, 7)
 #檢測到邊緣并且增強(qiáng)其效果
 img_edge = cv2.adaptiveThreshold(img_blur,255,
          cv2.ADAPTIVE_THRESH_MEAN_C,
          cv2.THRESH_BINARY,
          blockSize=9,
          C=2)
 #轉(zhuǎn)換回彩色圖像
 img_edge = cv2.cvtColor(img_edge, cv2.COLOR_GRAY2RGB)
 img_cartoon = cv2.bitwise_and(img_color, img_edge)
 # 保存轉(zhuǎn)換后的圖片
 cv2.imwrite(imgOutput_FileName, img_cartoon)
ImageList = [] #建立空的List
#循環(huán)讀取"D:\pythonpractice\Image"中的文件名
for filename in os.listdir(r"D:\pythonpractice\Image"):
 ImageList.append(filename)  #將文件名添加到ImageList
for i in ImageList: #循環(huán)讀取ImageList中的文件名,將其進(jìn)行卡通化處理
 print("正在卡通化" + i)
 cartoonise(i)

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python圖片操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • Python Opencv實現(xiàn)圖像輪廓識別功能

    Python Opencv實現(xiàn)圖像輪廓識別功能

    這篇文章主要為大家詳細(xì)介紹了Python Opencv實現(xiàn)圖像輪廓識別功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Python3中l(wèi)ambda表達(dá)式與函數(shù)式編程講解

    Python3中l(wèi)ambda表達(dá)式與函數(shù)式編程講解

    今天小編就為大家分享一篇關(guān)于Python3中l(wèi)ambda表達(dá)式與函數(shù)式編程講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Python TestCase中的斷言方法介紹

    Python TestCase中的斷言方法介紹

    這篇文章主要給大家介紹了關(guān)于Python TestCase中的斷言方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • python?scapy抓包獲取udp并轉(zhuǎn)發(fā)的操作步驟

    python?scapy抓包獲取udp并轉(zhuǎn)發(fā)的操作步驟

    這篇文章主要介紹了python?scapy抓包獲取udp并轉(zhuǎn)發(fā)的操作步驟,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • Python利用pyHook實現(xiàn)監(jiān)聽用戶鼠標(biāo)與鍵盤事件

    Python利用pyHook實現(xiàn)監(jiān)聽用戶鼠標(biāo)與鍵盤事件

    這篇文章主要介紹了Python利用pyHook實現(xiàn)監(jiān)聽用戶鼠標(biāo)與鍵盤事件,很有實用價值的一個技巧,需要的朋友可以參考下
    2014-08-08
  • Python并發(fā)編程線程消息通信機(jī)制詳解

    Python并發(fā)編程線程消息通信機(jī)制詳解

    這篇文章主要為大家介紹了Python并發(fā)編程之線程消息通信機(jī)制的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • 詳解Python 爬取13個旅游城市,告訴你五一大家最愛去哪玩?

    詳解Python 爬取13個旅游城市,告訴你五一大家最愛去哪玩?

    這篇文章主要介紹了Python 爬取13個旅游城市,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • MySQL最常見的操作語句小結(jié)

    MySQL最常見的操作語句小結(jié)

    這篇文章主要介紹了MySQL最常見的操作語句小結(jié),與表和庫相關(guān)的這些語句是學(xué)習(xí)MySQL中最基礎(chǔ)的知識,需要的朋友可以參考下
    2015-05-05
  • python總結(jié)之閉包和裝飾器

    python總結(jié)之閉包和裝飾器

    這篇文章主要為大家介紹了python閉包和裝飾器,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 解決pycharm:unused import statement錯誤的問題

    解決pycharm:unused import statement錯誤的問題

    這篇文章主要介紹了解決pycharm:unused import statement錯誤的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04

最新評論

怀化市| 广安市| 长宁县| 浙江省| 英山县| 奉节县| 新疆| 广宁县| 苗栗县| 揭阳市| 许昌县| 洞口县| 成安县| 绥滨县| 莆田市| 西藏| 苍溪县| 确山县| 图片| 灯塔市| 吴江市| 鄂托克旗| 衡阳县| 德庆县| 新密市| 渝中区| 雷山县| 镇平县| 宁陵县| 通辽市| 噶尔县| 进贤县| 朝阳县| 湟源县| 阜阳市| 达日县| 曲松县| 三明市| 綦江县| 庐江县| 惠来县|