1. 程式人生 > 實用技巧 >武大學生用Python敲出櫻花開放,拿去表白吧,屬於程式設計師的愛情

武大學生用Python敲出櫻花開放,拿去表白吧,屬於程式設計師的愛情

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理

以下文章來源於騰訊雲 作者:Python程式設計與實戰

( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料。 )


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

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

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

效果見下圖視訊:

http://mpvideo.qpic.cn/0bf2ciaakaaac4adlgdso5pfaewdaujaabia.f10003.mp4?dis_k=eb7095b68a62ad0db35b0a0e8241af42&dis_t=1585712608

武大微博後來還開源了程式碼:

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




<< 滑動檢視下一張圖片 >>

圖中cv_2、cv_3、cv_4依次執行即可

再來講講此處的原理(引用自 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()  # 釋放

程式碼千萬行,愛你當首行!

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

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