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()