使用 OpenCV 从 Python 视频中提取图像

开发
在这篇博客中,我们将使用Python从一段小视频中提取图像。为此,我们将使用开源的OpenCV库。

在这篇博客中,我们将使用Python从一段小视频中提取图像。为此,我们将使用开源的OpenCV库。

什么是OpenCV?

OpenCV(开源计算机视觉库:http://opencv.org)是一个包含数百种计算机视觉算法的开源库。OpenCV具有模块化结构,这意味着该包包含几个共享或静态库。以下是可用的模块:

  1. 核心功能(core) - 一个定义基本数据结构的紧凑模块,包括密集的多维数组Mat和所有其他模块使用的基本功能。
  2. 图像处理(imgproc) - 一个图像处理模块,包括线性和非线性图像滤波、几何图像变换(缩放、仿射和透视变形、通用表格重映射)、颜色空间转换、直方图等。
  3. 视频分析(video) - 一个视频分析模块,包括运动估计、背景减除和目标跟踪算法。
  4. 相机校准和3D重建(calib3d) - 基本的多视图几何算法、单目和立体相机校准、目标姿态估计、立体对应算法和3D重建元素。
  5. 2D特征框架(features2d) - 显著特征检测器、描述符和描述符匹配器。
  6. 目标检测(objdetect) - 检测预定义类别的对象和实例(例如,面部、眼睛、杯子、人、汽车等)。
  7. 高级GUI(highgui) - 一个简单易用的简单UI功能接口。
  8. 视频I/O(videoio) - 一个简单易用的视频捕获和视频编解码器接口。
  9. ...一些其他辅助模块,如FLANN和Google测试包装器、Python绑定等。

文档的后续章节描述了每个模块的功能。但首先,请确保熟悉在库中广泛使用的常见API概念。

使用pip安装:

pip install opencv-python

导入包:

import cv2

检查VideoCapture类的帮助:

help(cv2.VideoCapture())

声明视频的路径:

video_path = "input/extract-images-from-a-video-in-python/sample-video.mp4"
video_path

输出:‘input/extract-images-from-a-video-in-python/sample-video.mp4’

从路径读取视频:

cam = cv2.VideoCapture(video_path)
cam

输出:< cv2.VideoCapture 00000209D0E99FB0>

创建一个文件夹来保存图像

我们将创建一个名为‘image_data’的文件夹,如果它不存在。为了创建新目录,我们将使用OS包。

import os
try:
if not os.path.exists('image_data'):
os.makedirs('image_data')
except OSError:
print ('Error: Creating directory of image data')

读取视频帧并创建图像:

help(cam.read)

输出:

help(cv2.imwrite)

currentframe = 0
while(True):
# 从帧中读取 
retval, image = cam.read() 


if retval: 
    # 创建图像 
    name = './image_data/image' + str(currentframe) + '.jpg'
    print ('Creating...' + name) 


    # 写入提取的图像 
    cv2.imwrite(name, image) 


    currentframe += 1
else: 
    break
# 释放空间
cam.release()
# 销毁所有窗口
cv2.destroyAllWindows()

输出:

我们可以看到,从视频中捕获了85张图像。

列出捕获的图像:

import os
path = "image_data"
images_list = os.listdir(path)
print("Files and directories in '", path, "' :")
print(images_list)

输出:

查看前20张图像:

import matplotlib.pyplot as plt
import PIL
plt.figure(figsize = (12,8))
for num, item in enumerate(images_list[:20]):
  img = PIL.Image.open("image_data/" + item)
  plt.subplot(4, 5, num + 1)
  plt.axis('off')
  plt.imshow(img, aspect='auto')
  pass

输出:

责任编辑:赵宁宁 来源: 小白玩转Python
相关推荐

2023-11-15 13:04:30

Python提取表格

2020-07-08 07:54:03

PythonPDF数据

2023-11-29 11:30:17

PDF语言模型

2021-03-15 21:50:22

Linux提取文本GUI工具

2021-05-13 23:54:12

DockerDockerfile镜像

2021-03-10 10:20:06

Linux文本命令

2022-11-23 10:31:54

2019-09-29 09:08:41

Python数据库Google

2016-01-26 11:08:54

2022-08-24 15:57:17

图片轮廓

2021-09-04 23:45:40

机器学习语言人工智能

2019-09-04 11:09:38

物联网数据边缘

2013-04-01 11:14:56

IT大数据网络信息化

2023-04-27 07:06:09

Categraf夜莺

2014-07-16 17:35:03

Android表单模型

2021-03-16 09:00:00

深度学习人工智能传感器

2021-08-16 11:51:16

微软Windows 365Azure

2017-09-25 15:43:24

图像模板Python+Open

2020-05-08 11:12:58

恶意软件PC安全终端安全

2021-10-21 05:41:27

QueenSono安全工具提取数据
点赞
收藏

51CTO技术栈公众号