实现抖音闪烁效果---OpenCV-Python开发指南(54)
目录
- 抖音视频闪烁原理
- 实现抖音视频闪烁
抖音视频闪烁原理
在抖音视频的抖动过程中,我们还可以发现其视频的颜色曝光度都发生了一些变化,并不是单纯的只有抖动效果。所以,本篇将来实现视频的闪烁效果。
而图像闪烁的原理,其实说白了就是其曝光度的变化。在更改视频曝光度的之前,我们需要认识一个OpenCV中新的函数:cv2.LTU()。
LUT就是Look Up Table(颜色查找表)的缩写,简单点儿理解就是:通过LUT,我们可以将一组RGB值输出为另一组RGB值,从而改变画面的曝光与色彩。LUT文件就是一个包含了可以改变输入颜色信息的矩阵数据。LUT本身并不进行运算,只需在其中列举一系列输入与输出数据即可,这些数据呈一一对应的关系,系统按照此对应关系为每一个输入值查找到与其对应的输出值,这样即可完成转换。
了解其具体是干什么的之后,我们再来看看其函数的定义:
def LUT(src, lut, dst=None):
src:需要曝光的图像array,类型必须是np.uin8类型
lut:查找表,如果输入src是多通道的,例如是BGR三通到的图像,而查表是单通道的,则此时B、G、R三个通道使用的是同一个查找表
dst:曝光后返回的图像
可以看出来,cv2.LTU()函数可以将一组RGB值输出为另一组RGB值,而这映射的规则,由程序员自己制定。
这里,我们还需要了解Gamma变化。
简单的来说,Gamma变换就是用来图像增强,其提升了暗部细节,就是通过非线性变换,让图像从曝光强度的线性响应变得更接近人眼感受的响应,即将漂白(相机曝光)或过暗(曝光不足)的图片,进行矫正。
经过Gamma变换后的输入和输出图像灰度值关系如图1所示:横坐标是输入灰度值,纵坐标是输出灰度值,蓝色曲线是gamma值小于1时的输入输出关系,红色曲线是gamma值大于1时的输入输出关系。可以观察到,当gamma值小于1时(蓝色曲线),图像的整体亮度值得到提升,同时低灰度处的对比度得到增加,更利于分辩低灰度值时的图像细节。因此设置Gamme参数可以控制图像的曝光度,在0-1时会造成图像过度曝光。
实现抖音视频闪烁
了解了视频闪烁曝光的原理。下面,我们直接来实现其效果,具体代码如下所示:
#曝光图片
def exposure_effect(img, gamma):gamma_table = [np.power(x / 255.0, gamma) * 255.0 for x in range(256)]gamma_table = np.round(np.array(gamma_table)).astype(np.uint8)return cv2.LUT(img, gamma_table)if __name__ == "__main__":cap = cv2.VideoCapture("45.mp4")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))i = 1count = 5fourcc = cv2.VideoWriter_fourcc(*'MJPG')videoWriter = cv2.VideoWriter("output.avi", fourcc, fps, (width, height))while (cap.isOpened()):ret, frame = cap.read()if ret:if (i % 5 == 0 or 0 < count < 5):frame = exposure_effect(video_shake_effect(frame), 0.5)videoWriter.write(frame)else:count = 5cv2.imshow('video', frame)videoWriter.write(frame)i += 1c = cv2.waitKey(1)if c == 27:breakelse:breakcap.release()videoWriter.release()cv2.destroyAllWindows()
这里,我们将前文的抖动与今天讲解的闪烁进行结合,最后观察其效果:
其中gamma_table = [np.power(x / 255.0, gamma) * 255.0 for x in range(256)]曝光度的算法,但其值有浮点数,而图像是不允许有浮点数存在的,所以通过np.round四舍五入,然后将其转换为LTU的第一个参数类型输入值。
实现抖音闪烁效果---OpenCV-Python开发指南(54)相关推荐
- 实现抖音霓虹灯效果---OpenCV-Python开发指南(55)
目录 抖音霓虹灯原理 实现4个图片霓虹灯效果 实现视频霓虹灯效果 直接实现霓虹灯效果 抖音霓虹灯原理 抖音霓虹灯算法原理: 实时的光斑绘制,我们观察抖音霓虹的,你会发现所有的光斑都是圆形.所以,这里我 ...
- 实现抖音哈哈镜效果---OpenCV-Python开发指南(47)
目录 前言 哈哈镜放大效果 哈哈镜缩小效果 直接视频实现哈哈镜效果 前言 在抖音中,我们经常看到各种抖音玩家都喜欢使用哈哈镜效果.那么什么是哈哈镜呢? 在现实生活中,哈哈镜是指一种表面凹凸不平的镜子, ...
- shell date 日期格式化_抖音短视频系统开发,日期加减
let dateTime=new Date(); this.dateFomat是对日期格式化为 yyyy - mm - dd的格式 // 减一天 dateTime = dateTime.setDate ...
- Python开发指南[1]之程序员计时小时钟(附源码)
Python开发指南[1]之程序员计时小时钟 程序之美 前言 主体 运行效果 核心代码 逻辑分析 结束语 程序之美 前言 Python作为一门编程语言,这门语言的魅力和影响力已经远超C#.C++等编程 ...
- 从微信小程序到抖音小程序:转换指南
抖音小程序是一种新兴的小程序平台,与微信小程序类似,都是基于小程序框架的开发,不过两者的开发环境和API有所不同.如果你已经开发了一款微信小程序,想要将其转换为抖音小程序,可以按照以下步骤进行: 1. ...
- IOS抖音短视频APP开发关于扫描二维码,并根据文本生成二维码
IOS抖音短视频APP开发关于扫描二维码,(根据光线强弱显示隐藏闪光灯)并根据文本生成二维码. WeakSelf; //IOS抖音短视频APP开发构建扫描样式视图 _scanView = [[WSLS ...
- 抖音短视频APP开发如何生成二维码?
授权转载自云豹网络科技的CSDN博客 原文链接:https://blog.csdn.net/yb1314111/article/details/101283985 IOS抖音短视频APP开发关于扫描二 ...
- 抖音seo源码,抖音搜索排名,抖音账号矩阵程序开发搭建,抖音seo搜索技术研发搭建部署
抖音seo源码,抖音搜索排名,抖音账号矩阵程序开发搭建,抖音seo搜索技术研发搭建部署 抖音seo搜索逻辑,作为技术开发公司,我们在在抖音开放平台需要完成注册--申请系统服务商---入驻---关联应用 ...
- 抖音seo源码开发代码分享
抖音seo优化,抖音seo源码开发,抖音排名系统源码开发展示实例: 思路:抖音seo源码,抖音seo矩阵系统底层框架上支持了从ai视频混剪,视频批量原创产出,云存储批量视频制作,账号矩阵,视频一键分发 ...
- 抖音APP数据python爬虫——个人粉丝视频
抖音APP数据python爬虫--个人粉丝视频 学习分享,勿触底线. 最近有改进了,之前获取_signature参数的方式有点low.现在用pm2部署一下node接口美滋滋. 代码就不放了,可以去最后 ...
最新文章
- Python判断两个文件夹中互相不同的文件有哪些、判断一个文件夹相对于另外一个文件夹缺少了哪些文件
- self attentin Q K V心得
- 雷林鹏分享:PHP 简介
- java程序设计第一次作业
- 阿里云服务器重启出现An error occurred 如何处理
- [转]一个老工程师给年轻工程师的忠告
- python魔法方法与函数_在Python中画图(基于Jupyter notebook的魔法函数)
- 米斯特白帽培训讲义(v2)漏洞篇 Web 中间件
- ShellExecuteA URLDownloadToFileA
- 原子结构示意图全部_所有原子结构示意图 元素周期表
- mxh缩写英语_mxh的含义,mxh是什么的缩写,mxh的词语,mxh代表的意思
- android设置闹钟日期,在Android中将闹钟设置为特定日期和时间
- 数字舵机与模拟舵机_控制方法与性能比较
- 每日一题系列:考拉有n个字符串,任意两个字符串长度都是不同的。考拉最近学习到两种字符串的排序方法
- 计算机专业男人喜欢什么样的女人,说实在的,其实男人真正喜欢的女人,就三个特征...
- IM推送Android客户端SDK之智能心跳
- 网易python笔试题_2017秋季网易校园招聘编程题和个人解答(python)
- OpenCV VideoWriter报错: FFMPEG: tag ‘MP4V‘ is not supported with codec id 12 and format mp4解决方法
- 众多跑车壁纸素材一键即可获取
- 定义一个动物类java_Java问题利用接口继承完成对生物、动物、人三个接口的定义,其中生物接口定义呼吸抽象方法,动物接口定义了吃饭和睡觉两个抽...