武大畢學生用Python敲出櫻花開放

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


武大畢學生用Python敲出櫻花開放 | 附源碼,你也可以做到

(圖源武漢大學微博)


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


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


效果見下圖視頻:


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


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

武大畢學生用Python敲出櫻花開放 | 附源碼,你也可以做到

武大畢學生用Python敲出櫻花開放 | 附源碼,你也可以做到

武大畢學生用Python敲出櫻花開放 | 附源碼,你也可以做到

<< 滑動查看下一張圖片 >>


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


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


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


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


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


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


首先,使用 opencv 的 cv2.imwrite() 函數讀寫,再保存為’.jpeg’後綴的圖像


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


新建一張畫布,再選擇字體和字體大小。


<code>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)/<code>


寫個for循環生成數據,要給這些字加上相應的顏色字體,寫入創建的畫布中。


<code>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')/<code>


最後將圖片寫進視頻,導出即可。


<code>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() # 釋放/<code>


python學習資料獲取方式

評論區任意評論或者轉發一下

做完1、2步,私信回覆“學習”

私信不要多字,不要少字,不要錯字,私信方法:點擊我頭像,進入主頁面,右上角有私信功能,在關注的上方位置。


分享到:


相關文章: