天天看點

武大學生用Python敲出櫻花開放(附源碼)

雲栖号資訊:【 點選檢視更多行業資訊

在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!

今年的武漢大學沒有了往年的人山人海,但是美麗的櫻花依然在春天裡獨自綻放……

武大學生用Python敲出櫻花開放(附源碼)

武大開通了#櫻花雲直播# ,3月16日-3月25日,每天 10:00-16:00。相約武大官博,每天看不同地點的櫻花。

同時武大信管院的朱永春同學,用Python敲出櫻花開放,引發熱搜。

武大微網誌後來還開源了代碼:

這樣我們也能在自己的電腦上實作櫻花開放全過程🌸

武大學生用Python敲出櫻花開放(附源碼)
武大學生用Python敲出櫻花開放(附源碼)
武大學生用Python敲出櫻花開放(附源碼)

根據圖中依次執行即可。

再來講講此處的原理(引用自 Python程式設計時光)。

事實上,每一張圖檔都是由一個一個的像素點所組成的。而每個像素點,都有自己的顔色,其顔色可以用一個數組來表示:(a,b,c),其中每位數的取值範圍都是 0-255。

比如(0,0,0)代表黑色,(255,255,255)代表白色。

當像素點足夠多的時候,這張照片就是我們所說的高清照片。

而如果當像素點太少,我們的肉眼就能感覺到明顯的鋸齒感。

首先,使用 opencv 的 cv2.imwrite() 函數讀寫,再儲存為’.jpeg’字尾的圖像

cv2.imwrite("pic/frame%d.jpg" % count, image)  # save frame as JPEG file           

建立一張畫布,再選擇字型和字型大小。

blank = Image.new("RGB", [len(img[0]), len(img)], "white")
drawObj = ImageDraw.Draw(blank)

n = 10

font = ImageFont.truetype('C:/Windows/Fonts/Microsoft YaHei UI/msyhbd.ttc', size=n - 1)           

寫個for循環生成資料,要給這些字加上相應的顔色字型,寫入建立的畫布中。

for i in range(0, len(img), n):
    for j in range(0, len(img[i]), n):
        text = '武漢加油'
        drawObj.ink = img[i][j][0] + img[i][j][1] * 256 + img[i][j][2] * 256 * 256
        drawObj.text([j, i], text[int(j / n) % len(text)], font=font)
        print('完成處理——', i, j)

blank.save('new/new_' + pic, 'jpeg')           

最後将圖檔寫進視訊,導出即可。

def picvideo(path, size):
   # path = r'C:\Users\Administrator\Desktop\1\huaixiao\\'#檔案路徑
   filelist = os.listdir(path)  # 擷取該目錄下的所有檔案名
   filelist = resort(filelist)

   '''
   fps:
   幀率:1秒鐘有n張圖檔寫進去[控制一張圖檔停留5秒鐘,那就是幀率為1,重複播放這張圖檔5次]
   如果檔案夾下有50張 534*300的圖檔,這裡設定1秒鐘播放5張,那麼這個視訊的時長就是10秒
   '''
   fps = 24
   # size = (591,705) #圖檔的分辨率片
   file_path = 'video/new.mp4'# 導出路徑
   fourcc = cv2.VideoWriter_fourcc('D', 'I', 'V', 'X')  # 不同視訊編碼對應不同視訊格式(例:'I','4','2','0' 對應avi格式)

   video = cv2.VideoWriter(file_path, fourcc, fps, size)

   for item in filelist:
       if item.endswith('.jpg'):  # 判斷圖檔字尾是否是.png
           item = path + '/' + item
           img = cv2.imread(item)  # 使用opencv讀取圖像,直接傳回numpy.ndarray 對象,通道順序為BGR ,注意是BGR,通道值預設範圍0-255。
           video.write(img)  # 把圖檔寫進視訊

   video.release()  # 釋放           

代碼千萬行,愛你當首行!

無數個“武漢加油”彙聚在一起,每個字都是一個像素點,為你敲出一朵櫻花的延時開放🌸

看一朵花開,等花開成海,和武大櫻花一起為武漢加油!

【雲栖号線上課堂】每天都有産品技術專家分享!

課程位址:

https://yqh.aliyun.com/zhibo

立即加入社群,與專家面對面,及時了解課程最新動态!

【雲栖号線上課堂 社群】

https://c.tb.cn/F3.Z8gvnK

原文釋出時間:2020-03-24

本文作者::朱小五

本文來自:“

大資料DT 微信公衆号

”,了解相關資訊可以關注“

大資料DT