视频训练数预处理

        往期的博客我们简单的讲了什么是视频数据、会用什么方式加载视频数据并介绍了加载视频数据会用到的工具,这期博客我们开始实际的对视频数据做处理,文章内容:获取视频的信息、加载视频数据做处理、保存视频数据。

获取视频帧数与帧率

        上期博客中讲了图像分辨率和帧率的重要性,也是说明对一些高帧率视频需要做降采样,我们接下来就举个例子说明一下。假设我们有一部视频时长为1小时的影片,我们可以通过属性去观看数据的信息,但这对大规模数据来说并不是一个好的方法,那么我们使用opencv来实现这个功能。

import cv2


if __name__ == "__main__":
    video_path = "视频路径"
    cap = cv2.VideoCapture(video_path)
    # 视频总的帧数
    frame_num = cap.get(7)
    # 图片帧率
    fps = cap.get(5)

    while True:
         ret, frame = cap.read()
         print(f"视频帧率{fps} 视频总帧数{frame_num } 视频分辨率{frame.shape}")

        通过上面的代码我们就可以获取到视频的帧率、帧数、分辨率。其中的帧率、帧数和影片时长是相关的,相关计算公式如下:视频时长 = 视频帧数 / 视频帧率。如果我们的影片帧率较高,假设有60fps,但我们只想要采样20fps,这时候就需要对数据做处理了,相关计算公式如下:跳帧数 = 当前视频帧率 / 目标视频帧率 = 60 / 20 = 3(每间隔三张图片数据做一次采样)

加载视频数据并保存成npy格式

        我们在上面列举了目标采样率的计算方式,接下来我们把它应用上,将数据转换成npy格式进行存储(npy格式加载速度更快)。

import cv2
import numpy as np


if __name__ == "__main__":
    video_path = "视频路径"
    cap = cv2.VideoCapture(video_path)
    # 获取帧率
    fps = int(cap.get(5))
    frame_lists = []
    while True:
        ret, frame = cap.read()
        if not(ret):
            break
        # 对图片数据做缩小,缩小为224*224
        frame = cv2.resize(frame, (224, 224))
        # 将三维数据转换为一维
        frame_array = frame.reshape(-1)
        frame_lists.append(frame_array)
    # 根据视频帧率和目标帧率计算采样周期
    interval = int(fps / 20)
    frame_lists = np.array(frame_lists)[::interval]
    # 保存数据
    np.save("npy文件保存地址", frame_lists)

结尾

        感谢您的观看,觉得写的还可以请帮忙点个赞和收藏!

### Python 视频图像预处理教程 #### 安装必要的库 为了进行视频图像预处理,首先需要安装一些常用的Python库。OpenCV是一个强大的计算机视觉库,可以用于读取、写入以及处理视频文件。 ```bash pip install -i https://pypi.douban.com/simple opencv-python[^1] ``` 除了`opencv-python`外,还可以考虑安装其他辅助工具如`numpy`和`matplotlib`来帮助完成更复杂的图像变换与可视化工作: ```bash pip install numpy matplotlib ``` #### 加载并显示视频帧 通过OpenCV加载视频文件,并逐帧读取以便后续处理。下面是一段简单的代码片段展示如何打开一个本地存储的MP4格式视频文件,并将其每一帧作为图片对象提取出来。 ```python import cv2 def load_video_frames(video_path): cap = cv2.VideoCapture(video_path) frames = [] while True: ret, frame = cap.read() if not ret: break frames.append(frame) cap.release() return frames ``` 这段程序会返回整个视频序列中所有的彩色BGR格式图像列表。 #### 预处理技术概述 对于视频中的每一张静态图(即每一帧),都可以应用各种常见的图像增强方法,比如调整亮度对比度、去噪滤波器的应用等。具体来说,在医学领域内针对CT扫描得到的据集可能还会涉及到特殊的预处理步骤,例如窗宽窗位调节以突出特定组织结构特征[^2]。 然而,当面对常规RGB色彩空间下的自然场景视频素材时,则更多关注于几何校正(旋转缩放平移)、颜色转换(HSV/GrayScale)等方面的操作。这些基础功能同样可以通过调用OpenCV内置函轻松实现。 #### 实际案例分析 假设现在有一个需求是要去除一段监控录像里夜间拍摄部分过暗的问题。此时就可以利用直方图均衡化算法提升整体画面清晰度;而对于某些运动模糊严重的镜头则可尝试采用高斯双边过滤器来进行锐化修复。 ```python import cv2 import numpy as np def enhance_frame_brightness(frame): gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) equalized_gray = cv2.equalizeHist(gray) enhanced_bgr = cv2.cvtColor(equalized_gray, cv2.COLOR_GRAY2BGR) return enhanced_bgr video_frames = load_video_frames('surveillance.mp4') enhanced_frames = [enhance_frame_brightness(f) for f in video_frames] for i, ef in enumerate(enhanced_frames[:5]): cv2.imshow(f'Enhanced Frame {i}', ef) cv2.waitKey(0) cv2.destroyAllWindows() ``` 上述例子展示了怎样批量获取视频各时刻对应的单张照片形式表示,并对其进行简单有效的光照强度优化处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值