OpenCV Python 从摄像头捕获视频

OpenCV Python 从摄像头捕获视频

通过使用OpenCV库中的 VideoCapture() 函数,很容易在OpenCV窗口上捕获来自摄像头的实时流。

这个函数需要一个设备索引作为参数。您的计算机可能连接了多个摄像头。它们通过从0开始的索引进行枚举,用于内置摄像头的索引为0。该函数返回一个VideoCapture对象。

cam = cv.VideoCapture(0)

相机打开后,我们可以通过 read() 函数连续读取帧。

ret,frame = cam.read()

read()函数读取下一个可用的帧,并返回一个值(True/False)。此帧现在使用 cvtColor() 函数在期望的颜色空间中呈现,并在OpenCV窗口上显示。

img = cv.cvtColor(frame, cv.COLOR_BGR2RGB)
# Display the resulting frame
cv.imshow('frame', img)

为了将当前帧捕获为图像文件,您可以使用 imwrite() 函数。

cv2.imwrite(“capture.png”, img)

要将来自相机的实时流保存为视频文件,OpenCV提供了VideoWriter()函数。

cv.VideoWriter( filename, fourcc, fps, frameSize)

The fourcc参数是用于视频编解码器的标准化代码。OpenCV支持各种编解码器,如DIVX,XVID,MJPG,X264等。fps和framesize参数取决于视频采集设备。

VideoWriter()函数返回一个VideoWriter流对象,连续将抓取的帧写入循环中。最后,释放帧和VideoWriter对象以完成视频的创建。

示例

以下示例从内置网络摄像头读取实时视频并将其保存到output.avi文件。

import cv2 as cv
cam = cv.VideoCapture(0)
cc = cv.VideoWriter_fourcc(*'XVID')
file = cv.VideoWriter('output.avi', cc, 15.0, (640, 480))
if not cam.isOpened():
   print("error opening camera")
   exit()
while True:
   # Capture frame-by-frame
   ret, frame = cam.read()
   # if frame is read correctly ret is True
   if not ret:
      print("error in retrieving frame")
      break
   img = cv.cvtColor(frame, cv.COLOR_BGR2RGB)
   cv.imshow('frame', img)
   file.write(img)


   if cv.waitKey(1) == ord('q'):
      break

cam.release()
file.release()
cv.destroyAllWindows()

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程