边缘检测生成(伪)手绘线稿风格的视频简易版教程

效果视频演示

用边缘检测制作的原神(伪)线稿风格PV

用边缘检测制作的(伪)线稿风格原神PV

准备工作

为了表示方便,首先要在代码所在的目录下新建一个名为videos和一个名为new的文件夹

提取视频帧

其原理是用cv2读出视频,然后逐帧调用imwrite进行保存,这里有一个参数frameRate(帧率),表示每秒多少帧,因为我们是要生成和原来相似的视频,所以这里设置他的值为1

import cv2
import os

path = "./videos"
c = 1
for name in os.listdir(path):
    cap = cv2.VideoCapture(os.path.join(path, name))

    frameRate = 1

    while (True):
        ret, frame = cap.read()
        if ret:
            if (c % frameRate == 0):
                print("开始截取视频第:" + str(c) + " 帧")
                # 这里就可以做一些操作了:显示截取的帧图片、保存截取帧到本地
                cv2.imwrite(os.path.join(path, "%05d" % c + '.jpg'), frame)  # 这里是将截取的图像保存在本地
            c += 1
            cv2.waitKey(0)
        else:
            print("所有帧都已经保存完成")
            break
    cap.release()

提取之后的结果是在videos文件夹中会保存每一帧的图片
在这里插入图片描述
我们打开其中一张来看看
在这里插入图片描述

边缘检测并保存

其原理是调用cv2中的Canny进行边缘检测,并将检测后的结果保存

import cv2
import os
from random import randint
import numpy as np

path = "./videos"
line_color = (0, 0, 0)
bg_color = (255, 255, 255)
cnt = 1
for name in os.listdir(path):

    img=cv2.imread(os.path.join(path, name))
    img1 = np.zeros((img.shape[0], img.shape[1], 3))
    i=cv2.Canny(img,80,120)
    img1[i!=255] = bg_color
    img1[i==255] = line_color
    cv2.imwrite(os.path.join("./new", name), img1)

运行结果是new文件夹中出现边缘检测后的图片
在这里插入图片描述
我们打开一张来看看
在这里插入图片描述

图像合成视频

这里要注意一个size参数,这个参数是图片的大小。只需要将鼠标移动到图像上就可以查看图片的大小了,同时在cv2.VideoWriter中第三个参数是帧率,需要通过原视频的帧率设定,或者根据下一步提取出来的音频的长短尝试设定。

import numpy as np
import cv2
import os

path = r"./new"
size = (1920, 1080)#这个是图片的尺寸,一定要和要用的图片size一致
#完成写入对象的创建,第一个参数是合成之后的视频的名称,第二个参数是可以使用的编码器,第三个参数是帧率即每秒钟展示多少张图片,第四个参数是图片大小信息
videowrite = cv2.VideoWriter(r'./videos/test.mp4',-1,60,size)#20是帧数,size是图片尺寸
img_array=[]
for filename in os.listdir(path):#这个循环是为了读取所有要用的图片文件

    img = cv2.imread(os.path.join(path, filename))
    if img is None:
        print(filename + " is error!")
        continue
    for i in range(1):
        videowrite.write(img)


videowrite.release()
print('end!')

合成后我们会得到一个没有声音的视频
在这里插入图片描述

下面我们要把这个在videos文件夹下名为test.mp4的视频换一个文件夹,并且删除掉多余的图片,只留下原本的视频文件,然后进行音频的提取

音频提取

from moviepy.editor import AudioFileClip
import os

path = r"./videos"
for name in os.listdir(path):
    my=AudioFileClip(os.path.join(path, name))
    my.write_audiofile(os.path.join(path, name.split(".")[-2]+".mp3"))

视频和音频整合

这里可以通过剪辑软件或者代码合成,但是考虑到我们并不可能完全了解视频原本的帧率,所以还是推荐用剪辑软件合成,这样可以更好的对比视频和音频的长度

结尾

边缘检测整个活
在这里插入图片描述

用边缘检测的方式打开:鸡你太美

用边缘检测的方式打开:鸡你太美

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾醒(AiXing-w)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值