九九江南风送暖,予你樱花

九九江南风送暖,予你樱花

樱花盛放的歌曲

(推荐:跟着视频音乐的步伐,阅读本文哦(。◕ˇ∀ˇ◕))

小序:

惊蛰将至,所谓“九九江南风送暖,融融翠野启春耕”。春天到了,你和喜欢的人见面了嘛?我没有…(〒︿〒)

看了央视微博转发武大微博的“樱花”,我羡慕了,嫉妒心使我“面目全非”!!!

在这里插入图片描述

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)
    

    如图示例:

这里需要注意的一些地方:

  1. blank = Image.new(“RGB”, [len(img[0]), len(img)], “white”)#这里通过 [len(img[0]), len(img)]设置画板的高宽。
  2. n的大小需结合实际图片大小进行调整,保证清晰度的同时也要保证图片的展示效果。
  3. text = ‘0718’(这里是想要填充的文字内容,写给你喜欢的人哦!!!,尽量用英文,为了清晰度。
  4. drawObj.ink = img[]+img[]* 256 + img[] * 256 * 256#将像素点的颜色取出填充到画板的ink(墨水)上,一开始我也不理解这里颜色值的写法。后来就扒了一下ink的源码,这里的大小只是索引值,ImageDraw里面的palette(调色板)采用一维数组储存颜色值,所以ink是颜色的索引值。(色值数组的shape为1*24,RGB三通道。)
  5. drawObj.text([j, i], text[int(j / n) % len(text)], font=font)#这里的是[j,i],j,i相当于x,y轴坐标。n=10,代表每10个像素为一组填充图案。
  6. 选取的视频尽量以深色一点的为主,这里由于我选取的视频为浅色,所以后期对图片进行了饱和度的处理。

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)
在这里插入图片描述

春天到了,你等的人也在等你,终将会遇见,慢慢来吧,慢慢约会吧。。ヾ(๑╹◡╹)ノ" ٩(๑❛ᴗ❛๑)۶

猜你喜欢

转载自blog.csdn.net/acceptedday/article/details/104982987