九九江南风送暖,予你樱花
樱花盛放的歌曲
(推荐:跟着视频音乐的步伐,阅读本文哦(。◕ˇ∀ˇ◕))
文章目录
小序:
惊蛰将至,所谓“九九江南风送暖,融融翠野启春耕”。春天到了,你和喜欢的人见面了嘛?我没有…(〒︿〒)
看了央视微博转发武大微博的“樱花”,我羡慕了,嫉妒心使我“面目全非”!!!
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)
春天到了,你等的人也在等你,终将会遇见,慢慢来吧,慢慢约会吧。。ヾ(๑╹◡╹)ノ" ♥ ٩(๑❛ᴗ❛๑)۶