本文轉(zhuǎn)載至知乎ID:Charles(白露未晞)知乎個(gè)人專(zhuān)欄
本文轉(zhuǎn)載至知乎ID:Charles(白露未晞)知乎個(gè)人專(zhuān)欄
下載W3Cschool手機(jī)App,0基礎(chǔ)隨時(shí)隨地學(xué)編程>>戳此了解
導(dǎo)語(yǔ)
本來(lái)想用神經(jīng)網(wǎng)絡(luò)讓計(jì)算機(jī)學(xué)會(huì)畫(huà)鉛筆畫(huà)和素描的,后來(lái)發(fā)現(xiàn)其實(shí)不用神經(jīng)網(wǎng)絡(luò)效果也還可以,那么系列上就從簡(jiǎn)單的入手!
先放圖哈!
沙畫(huà):
鉛筆畫(huà):
文件下載
百度網(wǎng)盤(pán)下載鏈接: https://pan.baidu.com/s/1Y4ocZhhJuuRdWAJjWTh3MQ
密碼: 26xi
原理簡(jiǎn)介
素描:
sketch1.py:
其主要思想是彩色圖片先轉(zhuǎn)換成灰度圖片,然后模擬人作畫(huà)時(shí)先畫(huà)輪廓再逐步勾畫(huà)細(xì)節(jié)的過(guò)程。
勾輪廓時(shí)比較像素點(diǎn)左邊一小段區(qū)域內(nèi)像素平均值和右邊一小段區(qū)域內(nèi)像素平均值的差值,如果差值超過(guò)預(yù)設(shè)范圍,則認(rèn)為該點(diǎn)是輪廓點(diǎn)。另外,素描時(shí)不是一次性成像的,而是由淡到深,依次畫(huà),這樣可以使圖畫(huà)看起來(lái)深淺更分明,更有立體感。
sketch2.py:
原理類(lèi)似,但是以線(xiàn)條為單位進(jìn)行素描,并且增加了隨機(jī)函數(shù),使得線(xiàn)條長(zhǎng)度不確定,并且增加到上下、左右、左上、右下、右上、左下8個(gè)方位區(qū)塊的比較,這樣創(chuàng)作的素描畫(huà)看上去更柔和,也更接近真實(shí)的人類(lèi)作畫(huà)的風(fēng)格。
沙畫(huà):
sand_paint.py:
其實(shí)原理和畫(huà)鉛筆畫(huà)是差不多的,區(qū)別是用隨機(jī)函數(shù)模擬了空白背景上的沙粒,沙粒的顏色深淺,可以通過(guò)S_COLOR_LIGHT和S_COLOR_DARK來(lái)設(shè)置。
OK,代碼原理介紹完畢,其實(shí)很簡(jiǎn)單或者說(shuō)很low。但效果確實(shí)還不錯(cuò)。
運(yùn)行方式
python設(shè)置了環(huán)境變量之后,在cmd中運(yùn)行即可。輸入python文件名+想要素描或者化成沙畫(huà)的原圖像路徑(含圖像名)即可。例如下圖:
圖片將保存在當(dāng)前路徑下。
下期預(yù)告
讓python模仿世界名畫(huà)!也就是之前很火的一個(gè)人工智能話(huà)題。
比如梵高筆下的天安門(mén)和上海: