admin管理员组

文章数量:1531706

2024年6月15日发(作者:)

PythonOpenCV视觉智能感知

第一讲——读取摄像头或视频文件并播放显示

本部分内容将深入、全面、详细地介绍如何使用

AnacondaPython

OpenCV

读取摄像头或视频文件,

并进行播放。

1

任务描述

使用

AnacondaPython

OpenCV

,读取摄像头或本地视频文件并播放显示。

2

解题思路

要从摄像头或视频文件读取视频,首先应获取摄像头或视频文件,并判断是否获取成功。

获取摄像头或视频文件成功后,逐帧读取视频,播放显示。为了能够连续读取和播放视频的每帧图像,

需要将读取和播放视频帧放在一个循环体里。由于不知道摄像头的视频帧数,可以构造一个无限循环体。

对视频文件,可以构造一个无限循环体或以视频帧数为上限的有限循环体。在循环体内部应设置循环结束

控制条件,以便能够控制结束读取和播放视频。

视频读取和播放结束后,应释放摄像头或视频文件,并销毁视频播放窗口。

3

主要方法介绍

1

)导入

OpenCV

cv2

要使用

OpenCV

,首先导入

OpenCV

cv2.

导入方法为:

importcv2

导入

OpenCV

cv2

的前提是确保计算机已经安装了

daPython

安装

OpenCV

的方法为

AnacondaPrompt

窗口执行以下命令:

pipinstallopencv-python

2

apture()

方法

apture()

方法用于创建一个

VideoCapture

对象,以捕获摄像头或视频文件。该方法接收摄像

头的索引或视频文件名。如果只有一个摄像头,则以整数

0

进行索引。如果有多个摄像头,则分别以

0,1,2…

等整数进行索引。如果要读取视频文件,则需传入视频文件的全名称(包括路径和扩展名)字符串,形

’D:/opencv/videos/4’.

3

while

方法

Python

中使用

while

语句构造循环体,循环执行程序。即在条件满足情况下,循环执行某段程序,以

重复处理相同任务。其基本形式为:

while

判断条件

(condition)

执行语句

(statements)……

判断条件可以是任何表达式,任何非零、或非空(

null

)的值均为

True

。当判断条件为假

False

时,循

环结束。

4

read()

方法

VideoCapture

对象使用

read()

方法读取摄像头或视频文件的帧。该方法返回两个值,一般用

ret,frame

命名接收,当然也可以命名为其他名称。其中第一个返回值ret是布尔值,如果读取帧成功返回True,如果

读取失败则返回

False

。如果视频文件读取到结尾,它的返回值为

False.

第二个返回值

frame

是每一帧的图

像数据,是个形状为

(height,width,channels)

的整数型三维数组。

height,width,channels

分别表示图像帧的高

度、宽度、通道。数组中的每个元素的值是像素值,范围为

0-255.3

个通道

0,1,2

分别表示

B(

蓝色

)

G(

绿

)

R(

红色

)

5

y()

方法

y()

方法用于暂停程序的执行,等待一段时间,在此期间如果有按键按下,则返回键值的

ASCII

码,并响应相应的键盘事件。如果没有按键按下,则在等待设定的时间后,继续执行后续指令。

waitKey()

方法接收整数,表示等待的时间,单位是毫秒。如果传入的参数为小于等于

0

的整数,则表示无限等待,

直到有按键按下。

6

release()

方法

VideoCapture

对象使用

release()

方法释放自身。当不需要读取摄像头或视频文件时,应调用该方法释放

VideoCapture

对象。

7

destroyAllWindows()

方法

yAllWindows()

方法用于释放视频播放窗口。当不需要播放视频时,应调用此方法销毁视频播

放窗口。

4

代码实现

任务实现代码如下。

In[]:importcv2#

导入

opencv

cap=apture(0)#

创建

VideoCapture

对象

while(True):#

创建无限循环,用于播放每一帧图像

ret,frame=()#

读取图像的每一帧

('frame',frame)#

显示帧

#

等待

1

毫秒,判断此期间有无按键按下,以及按键的值是否是

Esc

y(1)&0xFF==27:

break#

中断循环

e()#

释放

ideoCapture

对象

yAllWindows()#

释放视频播放窗口

本文标签: 视频文件读取播放视频摄像头