成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

來得瑟一下!用Python做一個縮放自如的圣誕老人

開發(fā) 后端
圣誕節(jié)又要到了,雖說我們中國人不提倡過西方的節(jié)日,但是商家們還是很喜歡的,估計有對象的男孩紙女孩紙們也很喜歡吧。

 圣誕節(jié)又要到了,雖說我們中國人不提倡過西方的節(jié)日,但是商家們還是很喜歡的,估計有對象的男孩紙女孩紙們也很喜歡吧。

[[286615]]

今天的主題是為大家展示如何用python做一個不斷變大的圣誕老人,就像西游記中能夠隨意變幻大小的神仙妖怪那樣,算是送給大家的小禮物,先上個圖吧!


不要心急,盯著圖片看5秒

思路要點:

  • 通過縮放獲取等比大小的一組圖片
  • 將上述圖片疊加到固定大小的底圖中
  • 按順序組合圖片生成動圖

1、圖片縮放

本篇文章的大部分工作都是基于opencv實現(xiàn),而opencv進(jìn)行圖片縮放是極其容易的,不過這次我們要生成的是一組等比縮放的圖片,所以在cv2.resize方法的使用上可能跟以往略有出入,先來看函數(shù)原型:

  1. cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) 

其中src是原圖片,dsize是目標(biāo)圖片大小,當(dāng)dsize為0的時候,我們就可以通過fx和fy兩個參數(shù)來分別設(shè)置水平軸和垂直軸方向的縮放比例了。這樣說可能有些抽象,我們舉個例子來說明:

  1. for i in range(1, 40, 1): 
  2.   img = cv2.resize(image, (0, 0), fx=i/30, fy=i/30) 
  3.   cv2.imwrite(str(i)+'.png', img) 

運行上面這段代碼會生成39張不同比例的圖片,目標(biāo)圖片的大小由縮放比例fx和fy來控制,最小的一幅圖邊長是原圖的1/30,最大的圖片邊長是原圖的1.3倍(下圖):

既然等比縮放的圖片有了,是不是可以選定一個坐標(biāo)原點,直接合成動圖呢?答案是不行,因為常規(guī)的動圖生成方法要求素材圖片必須是相同的尺寸(像素),下面我們就來著重解決這一問題。

2、底圖疊加

python中實現(xiàn)兩幅圖片疊加的辦法有很多,但是他們都存在缺陷——要么疊加的圖片必須是相同大小,要么難以控制圖片疊加的具體位置。對此,小編采取的辦法是在兩幅圖之間進(jìn)行“像素級”的替換。

1).生成底圖

待疊加的圖片中,上層圖片就使用剛才獲取到的一系列等比縮放圖,下層圖片我們就生成一張固定大小的空白圖片。需要注意,這里生成的空白圖片必須大于最大的一幅縮放圖。

生成空白底圖分兩步完成,第一步生成固定大小(垂直軸和水平軸的長度)的二維數(shù)組;第二步使用cv2.cvtColor進(jìn)行顏色空間變換。代碼如下:

  1. blank = np.ones((blankh, blankw), dtype=np.uint8) * 255 
  2. ret = cv2.cvtColor(blank, cv2.COLOR_GRAY2BGR) 

其實上面代碼中的ret本質(zhì)上是一個三維數(shù)組,我們可以把它打印出來查看(下圖),但是通過cv2.imshow方法展示出來就是一張空白圖片了。這其中涉及一些較為底層的內(nèi)容,大家了解就好,文中不再贅述。

2).像素替換

正如剛才所說,opencv中的一幅圖其實是一個三維數(shù)組,其實也可以把它看作是二維數(shù)組,數(shù)組中的

每個元素是形如 [255, 255, 255] 的列表,其中存放的是圖片每個像素的顏色參數(shù)。也就是說,如果我們想實現(xiàn)一幅圖片疊加到另一幅圖片這樣的視覺效果,可以對被疊加圖片對應(yīng)位置的

像素進(jìn)行替換賦值。代碼形式如下圖所示,其中i和j分別為圖片在垂直方向和水平方向的坐標(biāo)。

  1. ret[i, j, 0] = image[i, j, 0] 
  2. ret[i, j, 1] = image[i, j, 1] 
  3. ret[i, j, 2] = image[i, j, 2] 

對一幅圖片而言,坐標(biāo)原點是在左上角(下圖所示)。此外,為了保證最終得到動圖的效果,不能簡單的將圖片以坐標(biāo)原點為基準(zhǔn)進(jìn)行疊加,比較好的辦法是把疊加原點設(shè)在底圖下邊緣的中心位置。

原理搞清楚后就可以開始圖片疊加操作了,在此期間需要進(jìn)行一些像素對應(yīng)位置的計算,雖然稍微有點繞但是并不復(fù)雜,詳細(xì)的轉(zhuǎn)化公式就不寫了,我們直接看代碼:

上面代碼中的image是已經(jīng)縮放完畢的圣誕老人圖片,blankh和blankw分別是空白圖片的高度和寬度,這個尺寸可以根據(jù)需求自行設(shè)置。

下圖展示的是一幅縮放比例1/2左右的圖片和底圖疊加后的效果,為了觀察方便,我給圖片加了一個邊框。

3、生成動圖

之前我們已經(jīng)解決了單幅圖片與底圖的疊加,為了準(zhǔn)備合成動圖所需素材,還要對多個等比縮放的圖片進(jìn)行底圖疊加操作??s放比例間隔越小、準(zhǔn)備的圖片素材越多,生成的動圖也就越平滑。

當(dāng)然,動圖的效果如何還要綜合考慮多個因素,這里小編還是采用39幅圖片組合動圖。其中最小的圖形高度是原圖的1/30,最大的圖形高度是原圖的1.3倍。與底圖疊加后的圖片就是下面這個樣子。

下面來說說動圖的合成,將多個相同尺寸的圖片合成動圖可以使用imageio這個庫來實現(xiàn),核心代碼只有一條:

  1. imageio.mimwrite('目標(biāo)文件名稱.gif', gifList, duration=0.15) 

其中第一個參數(shù)是git目標(biāo)文件名稱;gifList是一組列待合成的圖片,也就是上面圖片中展示的那些;最后一個參數(shù)duration表示畫面切換間隔,單位為秒。

現(xiàn)在通過下面這段代碼進(jìn)行動圖合成。

  1. file_path = 'pic' 
  2. imgList = os.listdir(file_path) 
  3. imgList = ['pic/'+img for img in imgList] 
  4. gifList = [imageio.imread(img) for img in imgList] 
  5. imageio.mimwrite('gif.gif', gifList, duration=0.15) 

來看合成后的動圖效果(下圖),仔細(xì)看看好像有點問題,怎么圖中的圣誕老人忽大忽小?這跟我們預(yù)想的不一樣啊。


其實這個問題是出在合成圖片的順序上,我們嘗試打印上面代碼中的imgList變量,結(jié)果如下:

可以看到,素材圖片并不是按照我們預(yù)想的順序排序。這在python的文件處理中也算是個比較常見的問題,解決方案之一是可以按照圖片的創(chuàng)建時間排序,具體操作是在上面的第二行代碼之后插入一條語句:

  1. imgList = sorted(imgList,key=lambda x: os.path.getmtime(os.path.join(file_path, x))) 

現(xiàn)在再次進(jìn)行動圖合成,就可以實現(xiàn)文章開頭的效果了。

當(dāng)然了,這種動圖制作方法不僅限于圣誕老人,任何圖片理論上都是可以的。比如說,我們還可以做一棵不斷長大的圣誕樹!

 

責(zé)任編輯:華軒 來源: 菜鳥學(xué)Python
相關(guān)推薦

2012-12-25 15:29:46

Google微軟圣誕老人

2019-12-26 12:30:54

攝像頭漏洞攻擊

2022-12-22 08:22:17

Python圖像圖像處理

2020-07-20 10:00:52

Python翻譯工具命令行

2013-08-26 11:21:02

Fedora 20

2021-12-01 07:02:55

Python 記錄器按鍵

2017-12-27 14:49:26

大數(shù)據(jù)派送禮物圣誕老人

2022-03-30 15:11:26

Python房價工具

2010-01-06 15:41:07

Linux操作系統(tǒng)

2023-08-02 08:11:58

Gaussdb系統(tǒng)廠商

2015-07-03 11:27:30

程序員自己神器

2020-01-14 11:19:38

網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全技術(shù)周刊

2020-12-01 17:46:24

FossilGit

2023-12-10 15:24:32

AI圣誕

2018-09-03 14:05:08

編程語言Python編程技巧

2015-12-28 12:03:44

LinuxUnix桌面

2021-12-30 06:59:27

視頻通話網(wǎng)頁

2021-07-07 11:08:21

機器學(xué)習(xí)數(shù)據(jù)集PHP

2021-12-23 09:50:46

Python游戲腳本

2018-01-04 16:04:35

圓環(huán)放大動畫
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 精品一区二区三 | 一区中文字幕 | 男人的天堂中文字幕 | 91视频大全 | 久久久国产精品网站 | 麻豆精品国产91久久久久久 | 国产亚洲精品综合一区 | 国产一级片久久久 | 亚洲精品视 | 中文字幕在线一区 | 成人国产精品色哟哟 | 一区二区三区四区在线 | 亚洲一区 中文字幕 | 北条麻妃99精品青青久久 | 国产成人精品网站 | 日韩精品一区二区三区 | 欧美日韩中文字幕在线 | 99热播精品 | 一区中文| 天天插天天射天天干 | 国产精品久久久久一区二区三区 | 九九综合九九 | 国产精品综合视频 | 亚洲高清久久 | 欧美日韩一区二区在线 | 日韩视频一区在线观看 | 国产91在线播放 | 久久中文字幕一区 | 高清成人av | 国产黄色一级片 | 四虎在线播放 | 国产成人99久久亚洲综合精品 | 亚洲精品久久久 | 久久伊人久久 | 天天干天天爱天天操 | 国产欧美日韩久久久 | 91传媒在线播放 | 精品自拍视频在线观看 | 97色免费视频 | 亚洲天堂一区二区 | 99热热精品|