欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

OpenCV圖片漫畫(huà)效果的實(shí)現(xiàn)示例

 更新時(shí)間:2020年08月18日 08:29:52   作者:Steven·簡(jiǎn)談  
這篇文章主要介紹了OpenCV圖片漫畫(huà)效果的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

我們隨手拍攝的照片,很難達(dá)到攝影師的水準(zhǔn),因此不管是手機(jī)上還是電腦內(nèi),都有一些軟件可以添加特效讓照片更好看,手機(jī)拍攝時(shí)也有即時(shí)的美化效果。不過(guò)我比較好奇漫畫(huà)特效,但是一直在網(wǎng)上看到別人的成品而找不到針對(duì)性的軟件,因此只有自己實(shí)現(xiàn)一下,雖然跟專(zhuān)業(yè)的還有差距,但效果還不錯(cuò)。

本次使用 OpenCV,采用 Python 實(shí)現(xiàn)。

對(duì)比現(xiàn)實(shí)中的畫(huà)畫(huà),一般是先畫(huà)出邊緣輪廓使整體規(guī)劃好,再填充顏色使其完整,因此在這里我們也采用這種方式。不過(guò)對(duì)圖片直接操作與從零開(kāi)始著筆不一樣,要將原始圖片進(jìn)行兩次不同的處理,再將處理后的兩個(gè)圖片疊加。

邊緣輪廓

漫畫(huà)中不管是人物還是風(fēng)景,刻畫(huà)的細(xì)節(jié)有限,因此需要把重要以及有特色的部分體現(xiàn)出來(lái),數(shù)量要適當(dāng)。

輪廓通過(guò)四步操作:

import cv2

img = cv2.imread("example.jpg")
img_copy = img

# 灰度處理
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 平滑操作,去除噪聲
img_blur = cv2.medianBlur(img_gray, 5)
# 通過(guò)閾值提取輪廓
img_edge = cv2.adaptiveThreshold(img_blur,
                 255,
                 cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                 cv2.THRESH_BINARY,
                 blockSize=9,
                 C=3)
# 將灰度圖片變成 3 通道,用于后續(xù)合并
img_edge = cv2.cvtColor(img_edge, cv2.COLOR_GRAY2BGR)

這里通過(guò)二值化的方式將輪廓提取出來(lái),采用自適應(yīng)閾值二值化函數(shù),基于像素周?chē)男^(qū)域確定像素的閾值,可以將有區(qū)別的部分的界限提取出來(lái),恰如漫畫(huà)對(duì)象中黑色粗體輪廓,且細(xì)節(jié)得當(dāng)。因閾值處理只能針對(duì)灰度圖像,因此需要先將彩色圖像轉(zhuǎn)換為單通道的灰度圖像,且為了去除描繪對(duì)象內(nèi)部的冗余細(xì)節(jié),還要對(duì)圖像進(jìn)行平滑處理,使顏色過(guò)度得緩慢一些,畢竟漫畫(huà)中顏色的應(yīng)用沒(méi)有現(xiàn)實(shí)生活中那么復(fù)雜,這樣得出的輪廓就比較好。

看一下效果:


對(duì)比原圖:


將兩個(gè)重要的方法介紹一下:

中值濾波:cv2.medianBlur(img, ksize)
主要是后面的參數(shù),代表內(nèi)核區(qū)域的邊長(zhǎng),必須是大于1的奇數(shù),如3、5、7……方法提取內(nèi)核區(qū)域下所有像素的中值,并將中心元素替換為該中值

自適應(yīng)閾值二值化:cv2.adaptiveThreshold(src, maxval, thresh_type, type, Block Size, C)

  • src: 輸入圖,只能輸入單通道圖像,通常來(lái)說(shuō)為灰度圖
  • dst: 輸出圖
  • maxval: 當(dāng)像素值超過(guò)了閾值(或者小于閾值,根據(jù)type來(lái)決定),所賦予的值
  • thresh_type: 閾值的計(jì)算方法,包含以下2種類(lèi)型:cv2.ADAPTIVE_THRESH_MEAN_C; cv2.ADAPTIVE_THRESH_GAUSSIAN_C.
  • type:二值化操作的類(lèi)型,與固定閾值函數(shù)相同,包含以下5種類(lèi)型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV.
  • Block Size: 圖片中分塊的大小
  • C :閾值計(jì)算方法中的常數(shù)項(xiàng)

顏色填充

邊緣輪廓已經(jīng)描繪好了,再添加顏料后就完整了。這里就比較簡(jiǎn)單了,只需要將原圖片的顏色細(xì)致度降低些就行了。

代碼如下:

for _ in range(2)
	# 降低分辨率
  img_copy = cv2.pyrDown(img_copy)
for _ in range(5):
	# 圖像平滑,保留邊緣
  img_copy = cv2.bilateralFilter(img_copy, d=9, sigmaColor=9, sigmaSpace=7)
img_copy = cv2.resize(img_copy, (img.shape[1], img.shape[0]),
            interpolation=cv2.INTER_CUBIC)

顏色要比較平滑,不能像現(xiàn)實(shí)生活中這么細(xì)致,先采用圖像金字塔將分辨率降低,并采用雙邊濾波去除噪聲,可以平滑平面區(qū)域,同時(shí)保持邊緣清晰。分辨率降低后圖像會(huì)變小,因此最后要將圖像放大為原來(lái)的大小,雖然圖像金字塔有專(zhuān)門(mén)的方法可以將圖像放大,但是尺寸可能會(huì)有一兩點(diǎn)變化,合并過(guò)程中要兩個(gè)圖像完全一樣大,所以這里直接按尺寸放大。

看一下效果:

將兩個(gè)重要的方法介紹一下:

分辨率降低:cv2.pyrDown(src, dst=None, dstsize=None, borderType=None)
一般只需要輸入圖像就行了,它會(huì)直接將圖像長(zhǎng)寬減半

雙邊濾波:cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]])

  • src:輸入圖像
  • d:過(guò)濾時(shí)周?chē)總€(gè)像素領(lǐng)域的直徑
  • sigmaColor:在color space中過(guò)濾sigma。參數(shù)越大,臨近像素將會(huì)在越遠(yuǎn)的地方mix。
  • sigmaSpace:在coordinate space中過(guò)濾sigma。參數(shù)越大,那些顏色足夠相近的的顏色的影響越大。

合并

img_cartoon = cv2.bitwise_and(img_copy, img_edge)
cv2.imshow("cartoon", img_cartoon)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.bitwise_and() 是對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行“與”操作,即對(duì)圖像(灰度圖像或彩色圖像均可)每個(gè)像素值進(jìn)行二進(jìn)制“與”操作:1&1=1,1&0=0,0&1=0,0&0=0

最后結(jié)果:

到此這篇關(guān)于OpenCV圖片漫畫(huà)效果的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)OpenCV 圖片漫畫(huà)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PyCharm 設(shè)置SciView工具窗口的方法

    PyCharm 設(shè)置SciView工具窗口的方法

    今天小編就為大家分享一篇PyCharm 設(shè)置SciView工具窗口的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 詳解Python中的文件操作

    詳解Python中的文件操作

    今天這篇文章給大家介紹Python中的文件操作,文章內(nèi)容介紹的很詳細(xì),有需要的可以參考借鑒。
    2016-08-08
  • Python 實(shí)現(xiàn)訓(xùn)練集、測(cè)試集隨機(jī)劃分

    Python 實(shí)現(xiàn)訓(xùn)練集、測(cè)試集隨機(jī)劃分

    今天小編就為大家分享一篇Python 實(shí)現(xiàn)訓(xùn)練集、測(cè)試集隨機(jī)劃分,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • 淺談Python中進(jìn)程的創(chuàng)建與結(jié)束

    淺談Python中進(jìn)程的創(chuàng)建與結(jié)束

    這篇文章主要介紹了淺談Python中進(jìn)程的創(chuàng)建與結(jié)束,但凡是硬件,都需要有操作系統(tǒng)去管理,只要有操作系統(tǒng),就有進(jìn)程的概念,就需要有創(chuàng)建進(jìn)程的方式,需要的朋友可以參考下
    2023-07-07
  • python中嵌套函數(shù)的實(shí)操步驟

    python中嵌套函數(shù)的實(shí)操步驟

    在本文里我們給大家分享了關(guān)于python中嵌套函數(shù)的步驟圖文分解,有需要的朋友們跟著學(xué)習(xí)下。
    2019-02-02
  • Python爬蟲(chóng)獲取基金變動(dòng)信息

    Python爬蟲(chóng)獲取基金變動(dòng)信息

    這篇文章主要介紹了Python爬蟲(chóng)獲取基金變動(dòng)信息,問(wèn)基于上一篇文章得內(nèi)容介紹圍繞python的相關(guān)資料展開(kāi)全文,需要的小伙伴可以參考一下
    2022-05-05
  • python django框架中使用FastDFS分布式文件系統(tǒng)的安裝方法

    python django框架中使用FastDFS分布式文件系統(tǒng)的安裝方法

    這篇文章主要介紹了python-django框架中使用FastDFS分布式文件系統(tǒng)的安裝方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-06-06
  • python版本單鏈表實(shí)現(xiàn)代碼

    python版本單鏈表實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了python版本單鏈表實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 使用Python實(shí)現(xiàn)將數(shù)據(jù)寫(xiě)入Excel工作表

    使用Python實(shí)現(xiàn)將數(shù)據(jù)寫(xiě)入Excel工作表

    在數(shù)據(jù)處理和報(bào)告生成等工作中,Excel?表格是一種常見(jiàn)且廣泛使用的工具,本文中將介紹如何使用?Python?寫(xiě)入數(shù)據(jù)到?Excel?表格,并提供更高效和準(zhǔn)確的?Excel?表格數(shù)據(jù)寫(xiě)入方案,需要的可以參考下
    2024-01-01
  • 關(guān)于python中remove的一些坑小結(jié)

    關(guān)于python中remove的一些坑小結(jié)

    這篇文章主要給大家介紹了關(guān)于python中remove的一些坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評(píng)論