OpenCV-Python 官方文档二

开始使用视频

目标

  • 学习读取视频,显示视频并且保存视频。
  • 学会从视频中捕获并显示。
  • 你将会学到这些方法:cv2.VideoCapture() cv2.VideoWriter() 

从照相机捕获视频

通常,我们必须用相机捕捉实时流。OpenCV为此提供了一个非常简单的接口。让我们从摄像机中捕捉一段视频(我正在使用笔记本电脑内置的摄像头),把它转换成灰度视频并显示出来。只是一个开始的简单任务。

要捕获视频,您需要创建一个VideoCapture 对象。它的参数可以是设备的索引,也可以是视频文件的名称。设备索引只是指定哪个照相机的数字。通常只用一个相机作为连接。所以我只通过0(或-1),你可以通过传递1等方式选择第二台相机。之后,你可以一帧一帧地捕捉。但到最后别忘了释放相机。

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

cap.read()返回了一个布尔类型(True/False)。如果帧读正确它将返回True,所以你可以通过检查这个返回值来检查这个视频视频是否结尾。

    有时,Caps可能没有初始化相机。在这种情况下,此代码显示错误。你可以检查它是否被cap.isOped()方法初始化。如果是真的就OK。否则,使用cap.open()打开它。

    你还可以使用cap.get(ProId)方法访问此视频的一些特性,其中proId是0到18之间的数字。每个数字表示视频的一个属性(如果它适用于该视频),可以在这里看到完整的细节:属性标识符。其中一些值可以使用cap.set(proId,value)进行修改。值是您想要的新值。

    例如,我可以通过cap.get(3)cap.get(4)检查框架的宽度和高度。默认情况下,它为我提供了640x480。但我想把它修改成320x240。只需使用ret=cap.set(3,320)ret=cap.set(4,240)

从文件中播放视频

    这与从相机一样,只是改变相机索引与视频文件名称,当显示帧的时候使用cv2.waitKey()控制适当的时间。如果设置太少视频将非常快并且如果设置太大视频将非常慢,所以25毫秒一帧是推荐的并且相当的OK。

import numpy as np
import cv2

cap = cv2.VideoCapture('vtest.avi')

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

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

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

cap.release()
cv2.destroyAllWindows()

保存视频

如果我们捕捉视频并且通过一帧一帧的方式去保存视频,对于图像来说保存图片是非常简单的,仅仅使用cv2.imwrite().方法就可以。对于视频来说就需要有点绕弯。

我们创建一个VideoWriter 对象。指定输出文件名(例如:output.avi)。然后指定FourCC代码(下一段中的详细信息)指定应该传递每秒帧数(Fps)和帧大小。最后一个是isColor 颜色标志。如果它是True,菜帧,否则以灰度帧工作。

FourCC是一个4字节的代码,用于指定视频编解码器.。可用代码的列表可以在Fourcc.org中找到。它依赖于平台。

FourCC code is passed as cv2.VideoWriter_fourcc('M','J','P','G') orcv2.VideoWriter_fourcc(*'MJPG) for MJPG.

捕获从相机,在垂直方向翻转每一帧然后保存。

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

# Define the codec and create VideoWriter object
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)

        # write the flipped frame
        out.write(frame)

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

# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()

发布了59 篇原创文章 · 获赞 93 · 访问量 35万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览