Skip to content

kingrong's blog

python-opencv调用摄像头

关于

Python利用opencv的库实现对摄像头的数据的读取,并逐帧显示。

opencv的安装: 终端运行 pip install python-opencv 即可。

实现

用到的库

import cv2
import numpy as np #如果你需要对读取到的摄像数据进行进一步的应用。

调用摄像头

调用摄像头,VideoCapture() 内的数字表示的是摄像头的设备编号,笔记本内建摄像头的编号一般为 0,如果你想使用外置摄像头将数字改为 1等,随你的摄像头的设备编号决定,可以通过设备管理器查看并尝试。

cap = cv2.VideoCapture(0)

读取并播放

while 循环中利用 cap.read() 读取摄像头的某一帧,通过 imshow() 来展示这一帧。等待1个单位时间后,如果检测到 q 按键被按下,就跳出循环,即停止读取和展示。

其中 ret 变量是cap读取之后返回的一个bool 变量,可以用它来判断是否读取到数据。

while(True):
  ret,frame = cap.read(0) #读取数据
  cv2.imshow('Frame',frame) #展示结果
  
  if cv2.waitkey(1) & 0xFF == ord('q'):
    break

释放摄像头

在调用摄像头之后不要忘记释放摄像头,否则你的下次调用摄像头的时候可能会有被占用的报错。我们需要释放摄像头并关闭我们用来展示的窗口。

cap.release()
cv2.destoryAllWindows()

完整代码

附上上述操作的完整代码:

import numpy as np  
import cv2

cap = cv2.VideoCapture(0)

while(True):
    ret, frame = cap.read()

    cv2.imshow('Frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

其他操作

保存视频或者截图

如果我们想要保存其中的某一帧,即截图,使用 cv2.imwrite() 可以非常方便的完成该功能,imwrite的使用方法,戳 这里

对于保存视频需要稍微复杂一些些的操作,我们需要创建一个 VideoWrite对象,并指定保存的文件名,然后指定Fourcc 值(下节详细)。然后指定每秒的帧数(fps)和帧的大小。该对象的最后一个参数为isColor,如果为True则编码器需要彩色帧,默认为 False,即保存为灰度帧。

Fourcc是用于指定__视频编码器__的四字节代码,在 fourcc.org 中可以找到可用的编码器列表(值得注意的是对于不同的系统适用的编码器似乎还不同) 。在这里我们使用 cv2.VideoWriter_fourcc() 对象来指定,比如使用 cv2.VideoWriter_fourcc(* 'XVID') 来指定XVID编码器。

代码如下:

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        frame = cv2.flip(frame,0)

        out.write(frame)

        cv2.imshow('frame',frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()

相关来源

Opencv


Comments