樱花盛放的歌曲
(推荐:跟着视频音乐的步伐,阅读本文哦(。◕ˇ∀ˇ◕))
文章目录九九江南风送暖,予你樱花小序:正篇:1.准备好高清的樱花视频,我们将通过代码把视频分解为图片。**([本文涉及的代码及素材均已上传](https://pan.baidu.com/s/1mTmeTrcDHALmv1a9V0AzDA),提取码:tju5)**2.重头戏——将我们想要输入的文字映射到每一帧的图片。3.最后将图片组成gif或者video,大功告成!ヽ(゚∀゚)メ(゚∀゚)ノ4.gif动态展示(~ ̄▽ ̄)~ : 小序:惊蛰将至,所谓“九九江南风送暖,融融翠野启春耕”。春天到了,你和喜欢的人见面了嘛?我没有…(〒︿〒)
看了央视微博转发武大微博的“樱花”,我羡慕了,嫉妒心使我“面目全非”!!!
So,let us给喜欢的人(o(* ̄3 ̄)o )也来用代码敲出这美丽的樱花吧。去告诉她,九九江南风送暖,予你樱花。
正篇: 1.准备好高清的樱花视频,我们将通过代码把视频分解为图片。(本文涉及的代码及素材均已上传,提取码:tju5) 通过cv2读取视频并获得视频的帧率,帧宽以及帧高。import cv2
cap = cv2.VideoCapture("E:/yinghua/yinghua.mp4") # 获取视频
isOpened = cap.isOpened() # 判断是否打开
isOpened = cap.isOpened() # 判断是否打开
print(isOpened)
fps = cap.get(cv2.CAP_PROP_FPS) # 帧率
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # 帧宽
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 帧高
读取视频的每一帧(也可以每10帧取一张,结合实际适当调整),并将图片以.jpg格式保存,quality=100%。
i = 0
while(isOpened):
if i == 10000:
break
else:
i += 1
flag, frame = cap.read() # 读取每一张flag(是否读取成功),frame(读取的帧)
fileName = 'image'+str(i)+'.jpg'
print(fileName)
if flag:
# 将帧图片按100%的质量保存
cv2.imwrite("E:/yinghua/imgsrc/%s" % (fileName), frame, [cv2.IMWRITE_JPEG_QUALITY, 100])
print('end')
2.重头戏——将我们想要输入的文字映射到每一帧的图片。
-这里我们采用python的内置库PIL,涉及简单的图案填充原理。
import cv2
import os
def draw(pic):
img = cv2.imread('E:/yinghua/imgsrc/' + pic)
img = img[:, :, (2, 1, 0)]
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 i in range(0, len(img), n):
for j in range(0, len(img[0]), n):
text = '0718'
drawObj.ink = img[i][j][0] + img[i][j][1] * 256 + img[i][j][2] * 256 * 256
# 画笔的颜色可以通过draw的ink属性来改变:
# draw.ink = 0(R) + 0(G) * 256 + 0(B) * 256 * 25
drawObj.text([j, i], text[int(j / n) % len(text)], font=font)
print('完成处理——', i, j)
blank.save('E:/trial/new_' + pic, 'jpeg')
filelist = os.listdir('E:/yinghua/imgsrc/')
for file in filelist:
draw(file)
如图示例:
这里需要注意的一些地方:
blank = Image.new(“RGB”, [len(img[0]), len(img)], “white”)#这里通过 [len(img[0]), len(img)]设置画板的高宽。 n的大小需结合实际图片大小进行调整,保证清晰度的同时也要保证图片的展示效果。 text = ‘0718’(这里是想要填充的文字内容,写给你喜欢的人哦!!!,尽量用英文,为了清晰度。) drawObj.ink = img[]+img[]* 256 + img[] * 256 * 256#将像素点的颜色取出填充到画板的ink(墨水)上,一开始我也不理解这里颜色值的写法。后来就扒了一下ink的源码,这里的大小只是索引值,ImageDraw里面的palette(调色板)采用一维数组储存颜色值,所以ink是颜色的索引值。(色值数组的shape为1*24,RGB三通道。) drawObj.text([j, i], text[int(j / n) % len(text)], font=font)#这里的是[j,i],j,i相当于x,y轴坐标。n=10,代表每10个像素为一组填充图案。 选取的视频尽量以深色一点的为主,这里由于我选取的视频为浅色,所以后期对图片进行了饱和度的处理。 3.最后将图片组成gif或者video,大功告成!ヽ(゚∀゚)メ(゚∀゚)ノ1.通过dir文件目录的索引,完成gif的生成。(如果你采用组成视频的方式,务必注意将图片resize为统一大小。)
import imageio
import os
outfilename = "E:/yinghua/yinghua.gif" # 转化的GIF图片名称
gif_images = []
filelist = os.listdir('E:/trail/')
sum = 0
for img in filelist:
gif_images.append(imageio.imread("E:/trail/" +img)) # 读取图片
imageio.mimsave(outfilename, gif_images, fps=5) # 转化为gif动画
2.组成视频的代码也奉上!(适当文件及目录名称适当调整即可使用)
import cv2
import os
img = cv2.imread('E:/yinghua/1.jpg')
imgInfo = img.shape
print(imgInfo)
size = (imgInfo[1], imgInfo[0])
print(size)
filelist = os.listdir('E:/trail/')
videowrite = cv2.VideoWriter("E:/DeepLearn/face Detection/video/01.mp4", -1, 5, size)#路径+编码器+视频帧数+宽高大小
for image in filelist:
img = cv2.imread('E:/trial/' + image)
img = cv2.imread(img)
videowrite.write(img)#写入方法 1.jpg data
print("end")
4.gif动态展示(~ ̄▽ ̄)~ :
备注:在手机上的观看效果更佳哦!(由于上传内存的限制,没有办法上传完整的gif)
春天到了,你等的人也在等你,终将会遇见,慢慢来吧,慢慢约会吧。。ヾ(๑╹◡╹)ノ" ♥ ٩(๑❛ᴗ❛๑)۶