社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

武大学生用python敲出樱花开放 | 附源码

马哥Linux运维 • 3 年前 • 415 次点击  

今年的武汉大学没有了往年的人山人海,但是美丽的樱花依然在春天里独自绽放。

(图源武汉大学微博)


为此,武大开通了#樱花云直播# ,3月16日-3月25日,每天 10:00-16:00。相约武大官博,每天看不同地点的樱花


同时武大信管院的朱永春同学,用python敲出樱花开放,引发热搜。


武大微博后来还开源了代码:


这样我们也能在自己的电脑上实现樱花开放全过程



图中cv_2、cv_3、cv_4依次执行即可


再来讲讲此处的原理。


事实上,每一张图片都是由一个一个的像素点所组成的。而每个像素点,都有自己的颜色,其颜色可以用一个数组来表示:(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:UsersAdministratorDesktophuaixiao\ #文件路径    filelist = os.listdir(path)  # 获取该目录下的所有文件名    filelist = resort(filelist)
fps: 帧率:1秒钟有n张图片写进去[控制一张图片停留5秒钟,那就是帧率为1,重复播放这张图片5次] 如果文件夹下有50534*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()  # 释放

文章转载:Python编程学习圈
(版权归原作者所有,侵删)

点击下方“阅读原文”查看更多

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/127168
 
415 次点击