iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python趣味编程实现手绘风视频示例
  • 106
分享到

Python趣味编程实现手绘风视频示例

2024-04-02 19:04:59 106人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

在正文开始之前,先看一下最初效果,下面是单张图片转换前后对比 图一 图二 图三 为了增加趣味性,后面将这段代码应用到一个视频中,加上一个背景音乐,新鲜的 “手绘风视频” 出炉

在正文开始之前,先看一下最初效果,下面是单张图片转换前后对比

图一

图片

图二

图片

图三

图片

为了增加趣味性,后面将这段代码应用到一个视频中,加上一个背景音乐,新鲜的 “手绘风视频” 出炉

python 手绘风视频制作!

“手绘风”实现步骤

讲解之前,需要了解手绘图像的三个主要特点:

  • 图片需为灰度图,是单通道的;
  • 边缘部分线条较重涂抹为黑色,相同或相近像素值转换后趋于白色;
  • 在光源效果的加持下,灰度变化可模拟人类视觉的远近效果

读取图片,转化为数组

因为后面要用到像素计算,为了方便,事先将读取后的图片转化为数组


a = np.asarray(Image.open("Annie1.jpg").convert('L')).astype('float')

计算 x,y,z 轴梯度值,并归一化

刚才提到手绘照片的一个特点,就是 手绘照片对边缘区域更加侧重,定位图片边缘部分,最有效方式就是计算梯度,用灰度变化来模拟图片远近效果,depth 表示预设深度,z 轴默认梯度为 1


depth = 10.  # (0-100)
grad = np.gradient(a)  # 取图像灰度的梯度值
grad_x, grad_y = grad  # 分别取横纵图像梯度值
grad_x = grad_x * depth / 100.
grad_y = grad_y * depth / 100.

对梯度值完成归一化操作


A = np.sqrt(grad_x ** 2 + grad_y ** 2 + 1.)
uni_x = grad_x / A
uni_y = grad_y / A
uni_z = 1. / A

加入光源效果

手绘风图片除了计算梯度值之外,还需要考虑光源影响;根据光源入射的角度不同最有对x,y,z 各轴上的梯度值有不同程度的影响,添加一个模拟光源,放置在斜上方,与 x , y 分别形成两个夹角

图片

并且这两个夹角是通过实验得到是已知的,然后根据正弦余弦函数计算出最终新的像素值


vec_el = np.pi / 2.2  # 光源的俯视角度,弧度值
vec_az = np.pi / 4.  # 光源的方位角度,弧度值
dx = np.cos(vec_el) * np.cos(vec_az)  # 光源对 x轴的影响
dy = np.cos(vec_el) * np.sin(vec_az)  # 光源对 y轴的影响
dz = np.sin(vec_el)  # 光源对z 轴的影响
b = 255 * (dx * uni_x + dy * uni_y + dz * uni_z)  # 光源归一化,8 255
b = b.clip(0, 255)# 对像素值低于0,高于255部分做截断处理

导出图片,并保存


im.save("Annie_shouhui.jpg")

以下是该步骤涉及到的的全部代码


from PIL import Image
import numpy as np
a = np.asarray(Image.open("Annie1.jpg").convert('L')).astype('float')
depth = 10.  # (0-100)
grad = np.gradient(a)  # 取图像灰度的梯度值
grad_x, grad_y = grad  # 分别取横纵图像梯度值
grad_x = grad_x * depth / 100.
grad_y = grad_y * depth / 100.
A = np.sqrt(grad_x ** 2 + grad_y ** 2 + 1.)
uni_x = grad_x / A
uni_y = grad_y / A
uni_z = 1. / A
vec_el = np.pi / 2.2  # 光源的俯视角度,弧度值
vec_az = np.pi / 4.  # 光源的方位角度,弧度值
dx = np.cos(vec_el) * np.cos(vec_az)  # 光源对 x轴的影响
dy = np.cos(vec_el) * np.sin(vec_az)  # 光源对 y轴的影响
dz = np.sin(vec_el)  # 光源对z 轴的影响
b = 255 * (dx * uni_x + dy * uni_y + dz * uni_z)  # 光源归一化
b = b.clip(0, 255)
im = Image.fromarray(b.astype('uint8'))  # 重构图像
im.save("Annie_shouhui.jpg")

制作手绘风视频

图片转化后的效果虽然也不错,但图片毕竟是静态的,人作为视觉动物,如果能做成动态的那再好不过了,知道上面的方法之后,只需对视频再加上一个拆帧合并操作,就能制作一个手绘风 视频效果

you-get 下载视频

这里我用 you-get 命令在 B 站上找了一个视频,下载了下来,


you-get --fORMat=dash-flv -o ./ https://www.bilibili.com/video/BV1tT4y1j7a9?from=search&8014393453748720686

图片

下载完之后,用 OpenCV2 对视频进行切帧操作,切帧同时对图片进行转化,写出到本地视频文件中


 vc = cv2.VideoCapture(video_path)
    c = 0
    if vc.isOpened():
        rval,frame = vc.read()
        height,width = frame.shape[0],frame.shape[1]
        print(height, width)
    else:
        rval = False
        height,width = 960,1200
    # jpg_list = [os.path.join('Pic_Directory/',i) for i in os.listdir('Pic_Directory') if i.endswith('.jpg')]
    fps = 24 # 视频帧率
    video_path1 = './text.mp4'
    video_writer = cv2.VideoWriter(video_path1,cv2.VideoWriter_fourcc(*'mp4v'),fps,(width,height))
    while rval:
        rval,frame = vc.read()# 读取视频帧
        img = coonvert_jpg(Image.fromarray(frame))
        frame_converted = np.array(img)
        # 转化为三通道
        image = np.expand_dims(frame_converted,axis = 2)
        result_arr = np.concatenate((image,image,image),axis = -1)
        video_writer.write(result_arr)
        print('Sucessfully Conveted---------{}'.format(c))
        c = c + 1
        if c >= 3000:
            break
    video_writer.release()

在图片序列提取时,需要注意一点,因为转化后的图片是单通道的,直接借助 OpenCV 生成视频序列是无法播放的,需增加一个步骤单通道转化为三通道!


 # 转化为三通道
 image = np.expand_dims(frame_converted,axis = 2)
 result_arr = np.concatenate((image,image,image),axis = -1)

想让生成的视频更有感觉的话可以添加一个背影音乐,借助剪辑软件、Python 都可,这里建议最好用剪辑软件,原因是 Python 自定义增加音频效果并不理想,添加音乐时需要有实时反馈, 而 Python 暂时无法满足此要求

小结

本文主要介绍了如何用 Python将一张图片转化为手绘风格,代码量很少但涉及知识领域与数学、物理相关,所以不容易理解,本篇文章目的只是为了向大家介绍图片手绘风转换有这么一种方法,当然如果有感兴趣的小伙伴可以深究一下

好了以上就是本篇文章的全部内容了,最后感谢大家的阅读,我们下期见,希望大家以后多多支持编程网!

--结束END--

本文标题: Python趣味编程实现手绘风视频示例

本文链接: https://www.lsjlt.com/news/137527.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python趣味编程实现手绘风视频示例
    在正文开始之前,先看一下最初效果,下面是单张图片转换前后对比 图一 图二 图三 为了增加趣味性,后面将这段代码应用到一个视频中,加上一个背景音乐,新鲜的 “手绘风视频” 出炉 ...
    99+
    2024-04-02
  • Android编程实现播放视频的方法示例
    本文实例讲述了Android编程实现播放视频的方法。分享给大家供大家参考,具体如下:播放视频文件其实并不比播放音频文件复杂,主要是使用 VideoView 类来实现的。这个 类将视频的显示和控制集于一身,使得我们仅仅借助它就可以完成一个简易...
    99+
    2023-05-30
    android 播放 视频
  • python编程简单几行代码实现视频转换Gif示例
    目录一、前言二、教程1. 安装必备库moviepy2. 写入代码3. 转换效果4. GIF很大的解决方案5. 截取视频长度转换6. 指定转换后的图片大小(分辨率)示例一、前言 很多网...
    99+
    2024-04-02
  • Python编程实现小姐姐跳舞并生成词云视频示例
    目录制作过程分为以下几个部分1、视频下载2、B 站弹幕下载3、视频切帧,人像分割4、对分割后的图像制作词云图5、图片拼接,合成视频最后 Python做了一个词云视频,以另一种角度来看...
    99+
    2024-04-02
  • Python "手绘风格"数据可视化方法实例汇总
    目录前言Python-matplotlib 手绘风格图表绘制Python-cutecharts 手绘风格图表绘制Python-py-roughviz 手绘风格图表绘制总结前言 大家好...
    99+
    2024-04-02
  • Python实现视频裁剪的示例代码
    目录前言环境依赖代码验证一下前言 本文提供将视频按照自定义尺寸进行裁剪的工具方法,一如既往的实用主义。 环境依赖 ffmpeg环境安装,可以参考文章:windows ffmpeg安装...
    99+
    2024-04-02
  • Python实现视频自动打码的示例代码
    目录序言准备工作实现原理模块素材工具代码解析完整代码序言 我们在观看视频的时候,有时候会出现一些奇怪的马赛克,影响我们的观影体验,那么这些马赛克是如何精确的加上去的呢? 本次我们就...
    99+
    2024-04-02
  • Python实现视频画质增强的示例代码
    目录前言原理实现步骤拆分处理合成效果总结前言 前面通过文章 几行代码,实现Python捕获、播放和保存摄像头视频!给大家介绍了如何读取、播放和保存视频,后面又通过文章&nb...
    99+
    2024-04-02
  • Python实现视频下载与合成的示例代码
    目录模块使用开发环境案例实现1.明确需求2.代码实现步骤实现代码模块使用 requests >>> pip install requests (数据请求 第三方模块...
    99+
    2024-04-02
  • Python实现合并多张图片成视频的示例详解
    目录合并多张图片到视频的方法说明moviepy 将多张图片合成视频导入所需模块创建 ImageSequenceClip 对象保存视频moviepy 合成多张图片更多配置名词解释FFm...
    99+
    2023-02-01
    Python合并图片成视频 Python合并图片 Python 图片 视频
  • python调用ffmpeg命令行工具便捷操作视频示例实现过程
    目录最重要的事裁剪视频计算分段获取视频长度分段获取文件代码集成总结参考资料文 | 李晓飞 来源:Python 技术「ID: pythonall」 最近有了一个新任务,需要将...
    99+
    2024-04-02
  • Python+selenium 自动化快手短视频发布的实现过程
    第一章:效果展示 ① 效果展示 ② 素材展示 一个为视频,另一个为像素大小不小于视频的封面。 第二章:实现过程 ① 调用已启用的浏览器 通过调用已启用的浏览器,可以实现直接跳过每...
    99+
    2024-04-02
  • Python实现抓取腾讯视频所有电影的示例代码
    目录运行环境实现目的与思路目的思路完整代码视频缓存ts文件实现效果运行环境 IDE丨pycharm版本丨Python3.6系统丨Windows 实现目的与思路 目的 实现对腾讯视频目...
    99+
    2024-04-02
  • R语言编程学习绘制动态图实现示例
    在讨论级数时,可能需要比对前 n n n项和的变化情况,而随着 n n n的递增,通过动态图来反映这种变化会更加直观,而通过R语言绘制动态图也算是一门不那么初级的技术,所以在此添加一...
    99+
    2024-04-02
  • Python编程实现凯撒密码加密示例
    目录 一、什么是凯撒密码 二、python实现凯撒加密 一、什么是凯撒密码 “在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺...
    99+
    2024-04-02
  • python编程冒泡排序法实现动图排序示例解析
    目录先上个冒泡排序的效果图:动态排序的原理Python tkinter库Canvas操作动态排序的完整代码部分代码注释先上个冒泡排序的效果图:  是不是,有那么一点点像了...
    99+
    2024-04-02
  • Python编程使用PyQt5库实现动态水波进度条示例
    目录原理介绍代码实操最近做了一个小项目,里面有一个需求需要添加一个动态进度条,进度条的样式就类似于水波来回起伏的那种形状,下面就是最初的展示效果(有一点区别,这里我加了一个进度自动增...
    99+
    2024-04-02
  • C++编程模板匹配超详细的识别手写数字实现示例
    首先,本篇文章用到的方法是模板匹配,而不是基于神经网络的,还请各位注意了!(模板匹配还请自行了解,站上有很多介绍)我刚开始做实验的时候只有一点c++基础,对于文件和opencv我一点...
    99+
    2024-04-02
  • Python编程利用科赫曲线实现三维飘雪效果示例过程
    目录随机雪花科赫雪花三维随机雪花 如果随机生成一些点,然后为每个点绘制一些枝杈,则可以画出类似蒲公英这种结构,只是看上去不太好看而已 import numpy as np im...
    99+
    2024-04-02
  • Python编程tkinter库Canvas实现涂鸦颜色表及围棋盘示例
    目录tkinter库Canvas操作三个实例实例一:涂鸦运行效果图:其它作图函数:实例二:颜色表运行效果图:实例三:围棋盘运行效果图:tkinter库Canvas操作三个实例 实例一...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作