Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之一 简单视频放大抖动效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之一 简单视频放大抖动效果

目录

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之一 简单视频放大抖动效果

一、简单介绍

二、简单视频放大抖动效果实现原理

三、简单视频放大抖动效果案例实现简单步骤

四、注意事项

五、其他


一、简单介绍

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

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

二、简单视频放大抖动效果实现原理

简单的视频抖动放大效果是对视频中的每一帧进行处理,使其在特定的条件下进行放大。通常情况下,这种效果会在视频的开始阶段或者特定的时间间隔内对帧进行放大处理,以达到抖动放大的效果。具体来说,这种效果通常包括以下几个步骤:

  1. 读取视频:首先,程序会读取输入的视频文件。

  2. 逐帧处理:接着,程序会对视频中的每一帧进行处理。在简单的视频抖动放大效果中,通常会根据特定的条件来判断是否对当前帧进行放大处理。

  3. 放大处理:当满足放大条件时,对当前帧进行放大处理。一种常见的放大方式是通过裁剪图像中心部分,然后将其放大至原始图像大小。

  4. 写入输出视频:最后,处理后的帧将被写入到输出视频文件中,从而形成一个具有抖动放大效果的视频。

涉及的关键函数包括:

  • cv2.VideoCapture()

    • 这个函数用于从视频文件中读取视频流。
    • video_shake() 函数中使用,用于打开视频文件并创建一个 VideoCapture 对象。
  • cap.get()

    • 这个方法用于获取视频的属性,如帧率、宽度、高度等。
    • video_shake() 函数中使用,用于获取视频的帧率、宽度和高度。
  • cv2.VideoWriter()

    • 这个函数用于创建一个用于保存视频的 VideoWriter 对象。
    • video_shake() 函数中使用,用于创建一个 VideoWriter 对象,用于写入输出视频文件。
  • cap.read()

    • 这个方法用于逐帧读取视频。
    • video_shake() 函数中使用,用于逐帧读取视频并对每一帧进行处理。
  • cv2.VideoWriter.write()

    • 这个方法用于将帧写入到视频文件中。
    • video_shake() 函数中使用,用于将处理后的帧写入到输出视频文件中。

三、简单视频放大抖动效果案例实现简单步骤

1、编写代码

2、运行效果

3、具体代码

"""
简单视频抖动放大效果apply_zoom() 函数:这个函数接受一个帧图像和放大因子作为参数,然后将图像放大。首先,计算了放大区域的左上角和右下角坐标,然后从原图中截取出放大区域,最后将截取的图像进行放大并返回。video_shake() 函数:这个函数接受视频文件的路径和输出视频文件的路径作为参数。首先,打开视频文件并获取视频信息,包括帧率、宽度和高度。然后,创建一个 VideoWriter 对象,用于写入输出视频文件。在一个循环中,逐帧读取视频,检查帧索引是否为前 5 帧或者 10 的倍数帧,如果是,则应用放大效果。最后,将处理后的帧写入输出视频文件,释放资源。
"""import cv2def apply_zoom(frame, factor):"""放大指定帧图:param frame::param factor: 这个函数接受一个帧图像和放大因子作为参数,然后将图像放大。:return:"""height, width, _ = frame.shapeh1 = int(height * 0.1)h2 = int(height * 0.9)w1 = int(width * 0.1)w2 = int(width * 0.9)zoomed_frame = frame[h1:h2, w1:w2]return cv2.resize(zoomed_frame, (width, height))def video_shake(video_path, output_path):"""视频放大抖动:param video_path::param output_path::return:"""# 打开视频文件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# 检查帧索引是否为 10 的倍数或前 5 帧if frame_index < 5 or frame_index % 10 == 0:frame = apply_zoom(frame, factor=2)out.write(frame)frame_index += 1cap.release()out.release()cv2.destroyAllWindows()def main():video_path = "Videos/CatRun.mp4"output_path = "Videos/VideoShake.mp4"video_shake(video_path, output_path)if __name__ == "__main__":main()

四、注意事项

  • 视频文件路径

    • 确保 video_path 变量中指定的视频文件路径是正确的,包括文件名和文件格式。如果视频文件不存在或路径错误,程序将无法打开视频文件。
  • 输出视频文件路径

    • 确保 output_path 变量中指定的输出视频文件路径是正确的,并且具有合适的文件名和文件格式。如果输出路径无法访问或已存在同名文件,程序将无法写入输出视频文件。
  • 视频处理参数

    • apply_zoom() 函数中,可以调整放大效果的参数,例如放大区域的比例因子。可以根据实际需求调整这些参数,以获得更好的效果。
  • 帧索引判断

    • video_shake() 函数中,使用了帧索引来判断是否对当前帧应用放大效果。确保你理解了条件判断的逻辑,并且根据需求调整条件判断的条件。
  • 资源释放

    • 在程序执行结束时,确保释放了视频文件对象和 VideoWriter 对象的资源,并关闭了所有的 OpenCV 窗口,以避免资源泄露和内存占用。

五、其他

1、生成一个黑白棋盘图

import cv2
import numpy as np# 设置棋盘格尺寸和方格数
board_size = (7, 7)
square_size = 100  # 每个棋盘格的边长,单位为像素# 计算棋盘格图像大小
board_width = board_size[1] * square_size
board_height = board_size[0] * square_size# 创建棋盘格图像
chessboard_image = np.zeros((board_height, board_width, 4), dtype=np.uint8)# 绘制棋盘格
for i in range(0, board_height, square_size):for j in range(0, board_width, square_size):color = 255 if (i // square_size + j // square_size) % 2 == 0 else 0chessboard_image[i:i+square_size, j:j+square_size] = (color, color, color, 255)# 保存为 PNG 图片
cv2.imwrite('chessboard.png', chessboard_image)# 显示图像
cv2.imshow('Chessboard', chessboard_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2、图片保存视频

import cv2# 读取棋盘图片
chessboard_image = cv2.imread('Images/chessboard.png')# 检查图片是否读取成功
if chessboard_image is None:print("Error: Unable to read chessboard image.")exit()# 设置视频帧率和尺寸
fps = 30
enlarged_height, enlarged_width = chessboard_image.shape[0] * 2, chessboard_image.shape[1] * 2# 创建 VideoWriter 对象
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video_writer = cv2.VideoWriter('calibration_video.mp4', fourcc, fps, (enlarged_width, enlarged_height))# 计算帧数
frame_count = 5 * fps# 循环生成放大颜色分离的棋盘格图像,并写入视频
for _ in range(frame_count):# 放大棋盘图片enlarged_chessboard = cv2.resize(chessboard_image, (enlarged_width, enlarged_height), interpolation=cv2.INTER_LINEAR)# 颜色分离blue_channel, green_channel, red_channel = cv2.split(enlarged_chessboard)# 对每个通道进行错开叠加显示merged_frame = cv2.merge((red_channel, green_channel, blue_channel))video_writer.write(merged_frame)# 释放资源
video_writer.release()
cv2.destroyAllWindows()

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

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

相关文章

Emacs之极速复制文件名、绝对路径等快捷键(一百三十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

vulnhub之devguru靶场提权过程(vulnhub打靶日记)

一、环境搭建 VM版本&#xff1a;17.5.1 build-23298084 攻击机&#xff1a;Kali2024&#xff08;下载地址&#xff1a;https://www.kali.org/&#xff09; 靶机&#xff1a;vulnhub靶场Devguru&#xff08;下载地址&#xff1a;https://www.vulnhub.com/entry/devguru-1,62…

考研数学|如何知道自己基础阶段复习过关,可以进入强化?

基础不牢&#xff0c;地动山摇&#xff01;&#xff01;&#xff01; 直接说结论&#xff0c;对于知能行刷到2级满可以开强化&#xff0c;知能行2级满后可以用1800来检测一下自己 对于基础阶段的学习者来说&#xff0c;推荐使用汤家凤老师的《1800题》。这本题集包含了大量的…

HarmonyOS NEXT应用开发之Environment:设备环境查询

开发者如果需要应用程序运行的设备的环境参数&#xff0c;以此来作出不同的场景判断&#xff0c;比如多语言&#xff0c;暗黑模式等&#xff0c;需要用到Environment设备环境查询。 Environment是ArkUI框架在应用程序启动时创建的单例对象。它为AppStorage提供了一系列描述应用…

18.web 应用测试

每年必考&#xff1b; 考几个关键点&#xff1a; 1、计算通信量&#xff1b;给定并发多少、每个并发事务请求的量是多少、单位时间并发有多少个请求&#xff1b;计算吞吐量&#xff1b; 解&#xff1a;记公式&#xff1b;课上不讲&#xff0c;真题里有公式&#xff1b;比较容易…

4.6 offset指令,jmp short指令,far,dword ptr各种跳转指令

4.6 offset指令&#xff0c;jmp short指令&#xff0c;far&#xff0c;dword ptr各种跳转指令 可以修改IP&#xff0c;或同时修改CS和IP的指令统称为转移指令。概括的讲&#xff0c;转移指令就是可以控制CPU执行内存中某处代码的指令 1. 转移指令 1.1 8086CPU的转移行为有以…

“帮助“Java成长的世界级大师不简单!

文章目录 初探编程&#xff1a;“天啊&#xff0c;真酷&#xff0c;程序真的能学习。”哺育Java成长&#xff0c;成为Java幕后英雄出书《Effective Java》斩获Jolt图书大奖 是谁&#xff1f;作品一出版就获得著名的Jolt图书大奖&#xff0c;每一版本豆瓣评分均超9.0&#xff01…

Windows虚拟主机如何创建数据库和导入数据库

看到有网友咨询想要知道Windows虚拟主机上如何使用数据库,由于是新手&#xff0c;对于主Plesk面板使用不是很了解,想要知道如何使用数据库&#xff0c;这边了解到他当前使用的是Hostease 的Windows 虚拟主机&#xff0c;首先&#xff0c;登录你的Plesk面板&#xff0c;这里有一…

如何保护IP地址?安全匿名上网的方法

当互联网成为每个家庭的重要组成部分后&#xff0c;IP地址就成了你的虚拟地址。您的请求从该地址开始&#xff0c;然后 Internet 将消息发送回该地址。那么&#xff0c;您担心您的地址被泄露吗&#xff1f; 对于安全意识高或者某些业务需求的用户&#xff0c;如果您正在寻找保护…

生存分析笔记

生存分析&#xff08;英语&#xff1a;Survival analysis&#xff09;是指根据试验或调查得到的数据对生物或人的生存时间进行分析和推断&#xff0c;研究生存时间和结局与众多影响因素间关系及其程度大小的方法&#xff0c;也称生存率分析或存活率分析&#xff0c;例如生物有机…

VIVADO固化程序步骤

VIVADO固化程序步骤 1烧录bit文件 1、正确的将FPGA专用下载器与调试板卡或者产品连接&#xff0c;检查无误后打开电源上电。注&#xff1a;严禁带电操作。 2、打开VIVADO18.3软件&#xff0c;如下所示&#xff1a; 3、点击Open Hardware Manager,界面如下所示&#xff1a; 4…

Python网络爬虫(三):Selenium--以携程酒店为例

1 Selenium简介 Selenium是一个用于网站应用程序自动化的工具&#xff0c;它可以直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。它相当于一个机器人&#xff0c;可以模拟人类在浏览器上的一些行为&#xff0c;比如输入文本、点击、回车等。Selenium支持多种浏览器&…