1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          縮放自如(如何讓用Python做一個縮放自如的圣誕老人)

          來源:互聯網轉載 時間:2024-05-08 15:22:52

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

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


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

          思路要點:

          • 通過縮放獲取等比大小的一組圖片

          • 將上述圖片疊加到固定大小的底圖中

          • 按順序組合圖片生成動圖

          1、圖片縮放

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

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

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

          foriinrange(1,40,1):img=cv2.resize(image,(0,0),fx=i/30,fy=i/30)cv2.imwrite(str(i)+'.png',img)

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

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

          2、底圖疊加

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

          1).生成底圖

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

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

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

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

          2).像素替換

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

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

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

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

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

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

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

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

          3、生成動圖

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

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

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

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

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

          現在通過下面這段代碼進行動圖合成。

          file_path='pic'imgList=os.listdir(file_path)imgList=['pic/'+imgforimginimgList]gifList=[imageio.imread(img)forimginimgList]imageio.mimwrite('gif.gif',gifList,duration=0.15)

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


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

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

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

          現在再次進行動圖合成,就可以實現文章開頭的效果了。

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

          看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注本站行業資訊頻道,感謝您對本站的支持。

          標簽:縮放自如-

          c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...

          2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...

          :喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...

          信用卡透支額度一般是多少?信用卡透支額度具體多少是由我們的信用、資產和收入等各種因素共同決定的,資信條件越好,我們的額度也就越好,申請到的信用卡等級也就越高。一般情況下,普通人首次申請信用卡一般是普卡,額度通常是在1萬以下,3千至5千的居多。隨著良好的用卡記錄和信用情況,我們通過養卡就可以申請增加額度或是直接給信用卡升級。如果是升級到金卡,一般透支額度最高可能有5萬,白金卡金通常是在5萬以上了。但...

          (資料圖片僅供參考)最近小編看到大家都在討論斗魚第二部講的什么啊相關的事情,對此呢小編也是非常的感應興趣,那么這件事究竟是怎么發生的呢?具體又是怎么回事呢?下面就是小編搜索到的關于斗魚第二部講的什么啊事件的相關信息,我們一起來看一下吧!《斗魚2》描述的是《斗魚》中單子入獄后的四年光陰,在單子殺了阿豹派去強暴語燕的手下而入獄后,眾人的生活都有了改變。語燕為了讓自己不再是于皓的包袱,努力擺脫過去嬌弱的...

          道指是什么?道指:又稱道瓊斯指數,是世界上壽命最長的股票指數,全稱是股票價格平均指數。當別人說到道瓊斯指數時,就有可能是指道瓊斯指數四組中的第一組道瓊斯工業平均指數。道指和納指的區別是什么?道瓊斯指數是傳統行業代表性的公司,一般泛指工業指數。納斯達克指數比較偏向于高科技公司,后者是一種創新模式,發展更具潛力。道指和納指哪個能更有影響力?納指更有影響力道指是道瓊斯工業指數,是由華爾街日報和道瓊斯公司...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>