抖音字符视频在去年火过一段时间。
反正我是始终忘不了那段极乐净土的音乐...
这一次自己也来实现一波,做一个字符视频出来。
主要用到的库有cv2,pillow库。
原视频,直接抖音下载的,妥妥的水印。
/ 01 / 视频转图片
在Pycharm上直接安装cv2库是成功不了的,具体什么原因我也不清楚。
经过我的实践,发现只需在Pycharm的虚拟环境下。
运行下面这个命令,即可成功安装cv2这个库。
pip3?install?opencv-python
不过还是会出现下载速度过慢,导致超时。
如果实在不行就可以去官网,下个.whl格式来安装。
视频转图片代码如下。
import?cv2
import?os
#?在当前目录下新建文件夹
folder_path?=?"img_bear/"
os.makedirs(folder_path)
#?进行视频的载入
vc?=?cv2.VideoCapture(‘bear.mp4‘)
c?=?0
#?判断载入的视频是否可以打开
ret?=?vc.isOpened()
#?循环读取视频帧
while?ret:
????c?=?c?+?1
????#?进行单张图片的读取,ret的值为True或者Flase,frame表示读入的图片
????ret,?frame?=?vc.read()
????if?ret:
????????#?存储为图像
????????cv2.imwrite(‘img_bear/‘+str(c)?+?‘.jpg‘,?frame)
????????#?输出图像名称
????????print(‘img_bear/‘+str(c)?+?‘.jpg‘)
????????#?在一个给定的时间内(单位ms)等待用户按键触发,1ms
????????cv2.waitKey(1)
????else:
????????break
#?视频释放
vc.release()
最后成功生成了369张图片。
呆萌呆萌的××熊,我是不知道什么品种的熊...
/ 02 / 图片转字符
普通图片转字符图片主要使用了pillow库。
对图片做灰度处理,然后根据图片像素点的灰度值,添加对应的字符。
具体代码如下。
from?PIL?import?Image,?ImageDraw,?ImageFont
import?numpy?as?np
import?os
#?创建字符图片文件夹
folder_path?=?"bear/"
os.makedirs(folder_path)
for?i?in?range(1,?1000):
????filename?=?‘img_bear/‘?+?str(i)?+?‘.jpg‘
????#?字符列表
????ascii_char?=?list("[email protected]%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~????????????<>i!lI;:,\"^`‘.?")
????#?判断图片是否存在
????if?os.path.exists(filename):
????????#?将图片转化为灰度图像,并重设大小
????????img_array?=?np.array(Image.open(filename).resize((70,?70),?Image.ANTIALIAS).convert(‘L‘))
????????#?创建新的图片对象
????????img?=?Image.new(‘L‘,?(560,?560),?255)
????????draw_object?=?ImageDraw.Draw(img)
????????#?设置字体
????????font?=?ImageFont.truetype(‘consola.ttf‘,?10,?encoding=‘unic‘)
????????#?根据灰度值添加对应的字符
????????for?j?in?range(70):
????????????for?k?in?range(70):
????????????????x,?y?=?k?*?8,?j?*?8
????????????????index?=?int(img_array[j][k]?/?4)
????????????????draw_object.text((x,?y),?ascii_char[index],?font=font,?fill=0)
????????name?=?‘bear/‘?+?str(i)?+?‘.jpg‘
????????print(name)
????????#?保存字符图片
????????img.save(name,?‘JPEG‘)
最后成功生成了字符图片。
和上面的原图一样,也是369张。
/ 03 / 字符转视频
接下来使用cv2库,将字符图片转化为视频。
具体代码如下。
import?cv2
import?os
#?设置视频编码器,这里使用使用MJPG编码器
fourcc?=?cv2.VideoWriter_fourcc(*‘MJPG‘)
#?输出视频参数设置,包含视频文件名、编码器、帧率、视频宽高(此处参数需和字符图片大小一致)
videoWriter?=?cv2.VideoWriter(‘bear_character.avi‘,?fourcc,?20.0,?(560,?560))
for?i?in?range(1,?1000):
????filename?=?‘bear/‘+str(i)+‘.jpg‘
????#?判断图片是否存在
????if?os.path.exists(filename):
????????img?=?cv2.imread(filename=filename)
????????#?在一个给定的时间内(单位ms)等待用户按键触发,100ms
????????cv2.waitKey(100)
????????#?将图片写入视频中
????????videoWriter.write(img)
????????print(str(i)?+?‘.jpg‘?+?‘?done!‘)
#?视频释放
videoWriter.release()
最后成功生成字符视频,这里放个图
如果你依然在编程的世界里迷茫,不知道自己的未来规划,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的!交流经验!
自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、人工智能、数据挖掘等,零基础到项目实战的资料都有整理。
送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,这里是python学习者聚集地
点击:python技术分享
原文地址:https://blog.51cto.com/14304496/2386217
时间: 2024-11-05 14:53:47