社区所有版块导航
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开发者 • 6 年前 • 822 次点击  

(给Python开发者加星标,提升Python技能

来源:凹凸数据-朱小五

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


(图源武汉大学微博)


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


同时武大信管院的朱永春同学,用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?

Python编程时光:《情人节来了,教你个用 Python 表白的技巧》


推荐阅读  点击标题可跳转

火爆全网!这个 Python 项目很骚气!

10 个 Python 字符串处理技巧



觉得本文对你有帮助?请分享给更多人

关注「Python开发者」加星标,提升Python技能

好文章,我在看❤️

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/56660