社区所有版块导航
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敲出樱花开放 | 附完整源码

Python绿色通道 • 2 年前 • 140 次点击  
↑ 关注 + 星标 ,每天学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’后缀的图像


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://m.weibo.cn/status/4483892952561309?




    
推荐阅读

  1. Python异常提示神器,1秒发现错误!

  2. 再见爬虫!这套Tableau可视化工具,彻底火了?

  3. 什么!竟然有人把图片从 1M 优化到 1024kb




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