Python OpenCV读取摄像头或视频文件并播放显示

任务:使用Anaconda Python和OpenCV,读取摄像头或视频文件并播放显示。

要从摄像头或视频文件读取视频,首先导入opencv库cv2. 使用cv2.VideoCapture()方法创建一个VideoCapture对象。该方法接收摄像头的索引或视频文件名。如果只有一个摄像头,则以整数0进行索引。如果有多个摄像头,则分别以0,1,2…进行索引。如果是读取视频文件,则需传入视频文件的全名称(包括路径和扩展名)字符串。

任务实现代码如下。


In []:

import cv2 #导入opencv

cap = cv2.VideoCapture(0) #创建VideoCapture对象

while(True): #创建无限循环,用于播放每一帧图像

ret, frame = cap.read() #读取图像的每一帧

cv2.imshow('frame',frame) #显示帧

#等待1毫秒,判断此期间有无按键按下,以及按键的值是否是Esc键

if cv2.waitKey(1) & 0xFF == 27:

break #中断循环

cap.release() #释放ideoCapture对象

cv2.destroyAllWindows() #释放视频播放窗口


Out:


Python OpenCV读取摄像头或视频文件并播放显示

播放视频截图


上述代码中,使用cv2.VideoCapture(0)方法创建了一个VideoCapture对象cap. 参数0是摄像头的索引。为读取和播放每一帧图像,使用while(True)创建了一个无限循环,在循环体内读取每帧图像并播放。

cap.read()方法读取视频的每一帧。它返回两个参数,第一个参数(本例ret)是bool型,表示是否成功读取到一帧图像。True表示成功读取,False表示读取失败。第二个参数(本例frame)为图像的数据。它是一个形状为(height, width, channels)的整数型数组。height, width, channels分别表示图像帧的高度、宽度、通道。数组中的每个元素的值是像素值,范围为0-255. 3个通道0,1,2分别表示B(蓝色),G(绿色),R(红色)。

cv2.imshow()方法用于播放帧。它接收两个参数,如本例中cv2.imshow('frame',frame)所示。第一个参数接收字符串,表示播放视频窗口的名称,它将显示在窗口上方。第二个参数即要播放的图像帧。它可以是cap读取的图像frame,也可以是处理过的图像。

要终止播放,可以设置一个按键,当检测到该按键按下后,使用break方法中断循环。这里用到了cv2.waitKey()方法。它接收整数,表示等待的时间(毫秒)。在等待期间判断是否有按键按下,如果有则返回按键的ASCII码。如果传入的参数为小于等于0的整数,则表示无限等待,直到有按键按下。

由于不同操作系统返回的键值长度可能不一样,而ASCII码只有8位,为保险起见,将cv2.waitKey()返回的键值与0xFF进行与运算,只取其低8位,即cv2.waitKey(1) & 0xFF,这样保证获得一个准确的ASCII码。本例使用Esc(ASCII码的十进制为27)键作为终止循环按键。如果使用其他按键(例如q), 则可以使用形如ord(’q’)的方法获取按键的ASCII码。

终止播放后,要使用cap.release()方法释放VideoCapture对象cap,使用cv2.destroyAllWindows()方法销毁播放窗口。


分享到:


相關文章: