计算机视觉OpenCV学习笔记(二):视频文件的读取、显示、保存,以及从摄像头获取并显示视频

计算机视觉OpenCV学习笔记(二):视频文件的读取、显示、保存,以及从摄像头获取并显示视频

(5)视频


本篇目标:

  • 学会读取视频文件,显示视频,保存视频文件。
  • 学会从摄像头获取并显示视频
  • 将用到cv2.VideoCapture(),cv2.VideoWrite()

5.1 使用摄像头捕获视频

opencv提供了一个非常简单的接口,让我们可以使用摄像头捕获一段视频,并转化成灰度视频显示出来,要想捕获视频首先我们需要先创建一个VideoVCapture对象,参数是设备的索引号,也可以是一个视频文件。0一般表示电脑的默认摄像头,当然也可以给出1、2…来选择其它的摄像头,在最后千万不要忘记停止捕获视频。

import cv2

cap = cv2.VideoCapture(0)
while(True):
    ret,frame = cap.read()
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    cv2.imshow('frame',gray)
    if  cv2.waitKey(1) == ord('q'):
        print(frame)
        break;
    pass
cap.release()
cv2.destroyWindow()

注:ret得到的是个布尔值,也就是说视频帧读取的正确就返回true,反之即为false。frame得到的是视频画面信息。

有时候摄像机不能初始化成功,我们可以通过cap.isOpened() 方法来判断摄像机是否初始化成功,如果初始化成功结果返回True,反之为False。倘若为False,我们可以使用cap.Open() 来手动初始化设备相机。

另外,我们还阔以通过cap.get(propld)、cap.set(propld,value),来获取视频的一些参数和改变相应的值,propld可取0到18之间的任何整数,每个数代表了视频的一个属性。

import cv2

cap = cv2.VideoCapture(0)
if cap.isOpened() == False:
    cap.open()
else:
    print('摄像机初始化成功')
    pass

while(cap.isOpened()):
    ret,frame = cap.read()
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)  #将摄像头获取到的画面转化成灰度图
    cv2.imshow('frame',gray)
    # print(cap.set(3,5),cap.set(4,5))
    if  cv2.waitKey(1) == ord('q'):
        # print(frame)
        break;
    pass
cap.release()
cv2.destroyWindow()

5.2 从文件中播放视频

这个非常的简单,我们只需要在cv2.VideoCapture()中传入视频文件的路径即可

cap = cv2.VideoCapture(r'/Users/ar/Desktop/video.mp4')

5.3 保存视频

对于我们捕获的视频,对每一帧进行处理后,希望将这个视频保存,对于图片来说,我们只需要调用cv2.imwrite()就好了,而对于视频,我们就需要一些其它的处理,包括视频的编码格式,视频帧率等。

我们先要创建一个VIdeoWrite的对象,这个对象有要输出视频的名字,FourCC编码,帧率等。然后在我们需要保存的时候直接调用这个对象的write()方法即可。

FourCC就是一个4字节码,是用来确定视频的编码格式的,可用的编码列表可以从http://fourcc.org查到。

import cv2

cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter(r'/Users/ar/Desktop/video_save.mp4', fourcc, 20.0, (640,480)) #保存视频的对象

while (cap.isOpened()):
    ret, frame = cap.read()
    if ret == True:
        frame = cv2.flip(frame,0)  #图像翻转,0是垂直翻转,1是水平翻转,-1是水平加垂直翻转
        out.write(frame)
        cv2.imshow('frame',frame)
        if cv2.waitKey(1) == ord('q'):
            break
            pass
    else:
        break
        pass
    pass
cap.release()
out.release()
cv2.destroyWindow()

猜你喜欢

转载自blog.csdn.net/qq_41294510/article/details/131573468