武大學生用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() # 釋放
程式碼千萬行,愛你當首行!
無數個“武漢加油”匯聚在一起,每個字都是一個畫素點,為你敲出一朵櫻花的延時開放?
看一朵花開,等花開成海,和武大櫻花一起為武漢加油!