Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之二 简单视频闪白效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之二 简单视频闪白效果

目录

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之二 简单视频闪白效果

一、简单介绍

二、简单视频闪白效果实现原理

三、简单视频闪白效果案例实现简单步骤

四、注意事项


一、简单介绍

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。

这里使用 Python  基于 OpenCV 进行视觉图像处理,......

二、简单视频闪白效果实现原理

视频闪白效果是指在视频播放过程中,画面突然闪现出白色,并迅速恢复到正常画面的现象。这种效果常常用于吸引观众的注意力,或者用于视频编辑中的过渡效果。

在编程中实现视频闪白效果意味着在视频的特定帧或时间点上将画面变为白色,然后迅速恢复为原来的画面。通常情况下,闪白效果可以通过在视频处理过程中对特定帧进行处理,将所有像素值设置为白色来实现。

闪白的特效,观察其对视频图像的影响,可以看出,图像整体颜色变淡,这是由于图像过度曝光所致,因此按照设置图像曝光度来进行算法设计。

图像的Gamma变换,主要是用来调整图像曝光度的算法。什么是Gamma变换呢?Gamma变换是对输入的图像灰度值进行的非线性操作,使输出图像的灰度值与输入图像的灰度值呈指数关系如下:

V_{out}=A V_{in}^{Gamma}

这个指数即为Gamma。

Gamma变换用来做图像增强,其提升了暗部细节,简单来说就是通过非线性变换,让图像从曝光强度的线性响应变得更接近人眼感受的响应,即将相机曝光或曝光不足的图片进行矫正。

Gamma值大于1时,对图像的灰度分布直方图具有拉伸作用,使灰度向高灰度值延展;而当小于1时,对图像的灰度分布直方图具有收缩作用,使灰度向低灰度值方向靠拢。因此设置Gamma参数可以控制图像的曝光度,在0~1时会造成图像过度曝光。

整个视频闪白特效的算法步骤如下:

(1)读取待处理的视频。

(2)设置出现闪白效果的帧数,比如对相邻5帧的图像进行Gamma参数调整使其过度曝光。

(3)设置视频中不变的帧数,比如以指定帧数为间隔来处理图像。

主要涉及函数简单说明:

  1. cv2.imread(file_path, flags): 这个函数用于读取图像文件。它接收两个参数,第一个参数是文件路径,第二个参数是读取图像的标志。在这个场景中,cv2.imread 被用于读取棋盘图像以及视频的每一帧图像。

  2. cv2.VideoWriter(output_path, fourcc, fps, frame_size): 这个函数用于创建一个视频写入对象,用于将处理后的帧写入输出视频文件中。它接收四个参数,分别是输出视频文件路径、视频编码器(fourcc)、帧率(fps)和帧尺寸(frame_size)。

  3. cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]): 这个函数用于调整图像的大小。它接收多个参数,其中 src 是源图像,dsize 是目标图像的尺寸(宽度和高度),fxfy 是水平和垂直方向的缩放因子,interpolation 是插值方法。在这个场景中,cv2.resize 被用于将棋盘图像放大两倍。

  4. cv2.split(m[, mv]): 这个函数用于将多通道图像分割成单通道图像。它接收一个参数 m,即多通道图像。在这个场景中,cv2.split 被用于将放大的棋盘图像的通道分离,以进行后续的颜色处理。

  5. cv2.merge(mv[, dst]): 这个函数用于将单通道图像合并成多通道图像。它接收一个参数 mv,即单通道图像列表。在这个场景中,cv2.merge 被用于将颜色通道重新合并,以恢复为完整的图像。

  6. cv2.LUT(src, lut[, dst]): 这个函数用于对图像进行查找表变换。它接收三个参数,分别是源图像 src、查找表 lut 和目标图像 dst。在这个场景中,cv2.LUT 被用于应用伽马变换,实现增白效果。

三、简单视频闪白效果案例实现简单步骤

1、编写代码,实现图片增白效果

2、运行效果

3、具体代码

"""
图片增白处理
"""import cv2
import numpy as npdef gamma_trans(img, gamma):"""增白处理:param img::param gamma::return:"""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)def main():img = cv2.imread('Images/DogFace.jpg')# 设置窗口属性,并显示图片cv2.namedWindow("Dog", cv2.WINDOW_KEEPRATIO)cv2.imshow('Dog', img)value_of_gamma = 0.1image_gamma_correct = gamma_trans(img, value_of_gamma)# 设置窗口属性,并显示图片cv2.namedWindow("gamma_trans", cv2.WINDOW_KEEPRATIO)cv2.imshow("gamma_trans", image_gamma_correct)cv2.waitKey(0)if __name__ == '__main__':main()

4、编写代码,指定视频某些帧变白效果

5、运行效果

6、具体代码

"""
视频闪白效果1、读取视频: 使用OpenCV库中的cv2.VideoCapture()函数读取视频文件,获取视频的帧率、尺寸等信息。2、处理每一帧: 遍历视频的每一帧,对每一帧进行闪白处理。闪白处理通常有以下几种方法:3、将特定帧的所有像素值设置为白色。对特定帧进行增白处理,例如应用伽马变换使图像变亮。写入输出视频: 将处理后的每一帧写入一个新的视频文件中,形成闪白效果的视频。
"""import cv2
import numpy as npdef flash_white(frame, frame_index):"""闪白处理 1:param frame::param frame_index::return:"""if frame_index < 5 or frame_index % 5 == 0:return 255 * np.ones_like(frame, dtype=np.uint8)else:return framedef flash_white2(frame, frame_index):"""闪白处理 2:param frame::param frame_index::return:"""if frame_index < 5 or frame_index % 5 == 0:return gamma_trans(frame, 0.03)else:return framedef gamma_trans(img, gamma):"""增白处理:param img::param gamma::return:"""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)def main():video_path = "Videos/CatRun.mp4"output_path = "Videos/VideoFlashWhite.mp4"cap = cv2.VideoCapture(video_path)# 获取视频信息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))# 定义视频编码器fourcc = cv2.VideoWriter_fourcc(*'mp4v')# 创建 VideoWriter 对象out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))frame_index = 0while cap.isOpened():ret, frame = cap.read()if not ret:break# 闪白效果frame = flash_white2(frame, frame_index)out.write(frame)frame_index += 1cap.release()out.release()cv2.destroyAllWindows()if __name__ == "__main__":main()

四、注意事项

  1. 确保正确处理视频的每一帧,不要跳帧或漏帧。
  2. 选择合适的帧索引进行闪白处理,通常是在视频开始的前几帧和特定的时间点。
  3. 在处理视频时注意内存占用和运行时间,避免出现卡顿或内存溢出的情况。
  4. 根据需要调整闪白效果的强度和持续时间,以达到预期的视觉效果。
  5. 测试和调试代码,确保生成的视频满足预期的要求,并且没有出现问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/599129.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是GIF?MP4视频如何转换成GIF动图格式?

一&#xff0c;什么是GIF GIF的全称是Graphics Interchange Format&#xff0c;可译为图形交换格式&#xff0c;用于以超文本标志语言&#xff08;Hypertext Markup Language&#xff09;方式显示索引彩色图像&#xff0c;在因特网和其他在线服务系统上得到广泛应用。GIF是一种…

说说TCP为什么需要三次握手和四次挥手?

一、三次握手 三次握手&#xff08;Three-way Handshake&#xff09;其实就是指建立一个TCP连接时&#xff0c;需要客户端和服务器总共发送3个包 主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备 过程如下&#xff…

激光雷达和相机的联合标定工具箱[cam_lidar_calibration]介绍

激光雷达和相机的联合标定工具箱[cam_lidar_calibration]介绍 写在前面安装过程调试过程标定成功可视化展示 写在前面 激光雷达和相机联合标定工具 论文地址&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9564700 github地址: https://github.com…

手机如何在线制作gif?轻松一键在线操作

现在大家都喜欢使用手机来拍摄记录有趣的事物&#xff0c;但是时间长了手机里的视频越来越多导致手机存储空间不够了&#xff0c;这些视频又不想删除时应该怎么办呢&#xff1f;这个很简单&#xff0c;下面就给大家分享一款不用下载手机就能操作的视频转gif网站-GIF中文网&…

Linux -- 字符设备驱动--LED的驱动开发(初级框架)

驱动框架一阶段 我们怎样去点亮一个 LED 呢&#xff1f;分为三步&#xff1a; 看原理图确定引脚&#xff0c;确定引脚输出什么电平才能点亮/熄灭 LED 看主芯片手册&#xff0c;确定寄存器操作方法&#xff1a;哪些寄存器&#xff1f;哪些位&#xff1f;地址是&#xff1f; 编…

STM32智能家居小助手

​ 设计的目的 大部分家用电器开关仍旧是传统的机械式按键开关&#xff0c;原因是传统式的电器开关开发周期短&#xff0c;制作成本低&#xff0c;方案成熟&#xff0c;但是传统的遥控家电开关已经不能满足人们对家电控制的要求&#xff0c;传统的遥控器具有单一性&#xff0c;…

6_6_SQL

//名词 Candidate key:若表中记录的某一字段或字段组合能够唯一标志记录&#xff0c;则称该字段或字段组合为候选关键字 Primary key:若一个表有多个候选关键字&#xff0c;则选定其中一个为主关键字&#xff0c;也称为主键 Foreignkey:若某字段或字段组合不是数据库中A表的关键…

鼠标灵敏度怎么调,鼠标灵敏度怎么调最稳

鼠标和键盘是操作计算机过程中使用最频繁的设备之一&#xff0c;用电脑的时&#xff0c;我敢说你一定离不开鼠标。有些用户发现鼠标不太好用&#xff0c;尤其是在游戏时&#xff0c;总觉得鼠标移动太慢了。另外&#xff0c;如果你感觉鼠标按键失灵、鼠标单击变双击以及反应迟钝…

MySQL的存储引擎、索引与事务

常见的端口号 MySQL–3306http–80https–443tcp–23fcp–21tomcat–8080ssh–22oracle–1521rockermq–9876 存储引擎 使用指令查看所有引擎&#xff1a; show engines;从图中可以看出MySQL默认的存储引擎是InnoDB&#xff1b;并且在5.7版本所有的存储引擎中只有 InnoDB 是…

SpringBoot3整合RabbitMQ之四_发布订阅模型中的fanout模型

SpringBoot3整合RabbitMQ之四_发布订阅模型中的fanout模型 文章目录 SpringBoot3整合RabbitMQ之四_发布订阅模型中的fanout模型3. 发布/订阅模型之fanout模型1. 说明1. 消息发布者1. 创建工作队列的配置类2. 发布消费Controller 2. 消息消费者One3. 消息消费者Two4. 消息消费者…

如何在 Node.js 中使用 bcrypt 对密码进行哈希处理

在网页开发领域中&#xff0c;安全性至关重要&#xff0c;特别是涉及到用户凭据如密码时。在网页开发中至关重要的一个安全程序是密码哈希处理。 密码哈希处理确保明文密码在数据库受到攻击时也难以被攻击者找到。但并非所有的哈希方法都是一样的&#xff0c;这就是 bcrypt 突…

MySQL操作DML

目录 1.概述 2.插入 3.更新 4.删除 5.查询 6.小结 1.概述 数据库DML是数据库操作语言&#xff08;Data Manipulation Language&#xff09;的简称&#xff0c;主要用于对数据库中的数据进行增加、修改、删除等操作。它是SQL语言的一部分&#xff0c;用于实现对数据库中数…