资讯专栏INFORMATION COLUMN

opencv python 从摄像头获取视频/从文件获取视频 /保存视频

netmou / 1729人阅读

摘要:这次开始学习从摄像头获取视频使用获取视频要获取视频,需要创建一个对象,参数可以是设备索引摄像头索引或视频文件的名称。

这次开始学习Getting Started with Videos

1从摄像头获取视频

使用cv2.VideoCapture()获取视频.

cv2.VideoCapture(builtins.object)

要获取视频,需要创建一个VideoCapture对象,参数可以是设备索引(摄像头索引)或视频文件的名称。如果是设备索引,当只连接一台摄像机时,可以是0或-1;也可以通过传递1来选择第二个摄像头。

我们设cap = cv2.VideoCapture(0)

cap.open()

打开cap

cap.isOpened()

检测cap是否初始化成功,如果返回True,则初始化成都,否则使用cap.open()打开cap

cap.read()
返回两个值
首先返回一个bool值,如果能正确读取帧,则为True,否则为False.可以通过检查该返回值来检查视频的结尾.
再返回一个值,为每一帧的图像,该值是一个三维矩阵

Note :如果使用一个变量接受两个值,frame = cap.read() 则 frame 为一个元组,原来使用 frame 处需更改为 frame[1]

cap.get(propld)

通过cap.get(propld)访问视频的某些功能,propld是0到18之间的数字。每个数字表示视频的属性。
比如:
cap.get(cv2.CAP_PROP_FRAME_WIDTH)和cap.get(cv2.CAP_PROP_FRAME_HEIGHT)得到帧宽和高度.
如果想修改为320x240.只需使用
ret = cap.set(cv2.CAP_PROP_FRAME_WIDTH,320)和
ret = cap.set(cv2.CAP_PROP_FRAME_HEIGHT,240).

参数 propld 功能
cv2.CAP_PROP_POS_MSEC 0 视频文件的当前位置(以毫秒为单位)或视频捕获时间戳
cv2.CAP_PROP_POS_FRAMES 1 基于0的索引将被解码/捕获下一帧
cv2.CAP_PROP_POS_AVI_RATIO 2 视频文件的相对位置:0 - 视频的开始,1 - 视频的结束
cv2.CAP_PROP_FRAME_WIDTH 3 帧的宽度
cv2.CAP_PROP_FRAME_HEIGHT 4 帧的高度
cv2.CAP_PROP_FPS 5 帧速
cv2.CAP_PROP_FOURCC 6 4个字符表示的视频编码器格式
cv2.CAP_PROP_FRAME_COUNT 7 帧数
cv2.CAP_PROP_FORMAT 8 byretrieve()返回的Mat对象的格式
cv2.CAP_PROP_MODE 9 指示当前捕获模式的后端特定值
cv2.CAP_PROP_BRIGHTNESS 10 图像的亮度(仅适用于相机)
cv2.CAP_PROP_CONTRAST 11 图像对比度(仅适用于相机)
cv2.CAP_PROP_SATURATION 12 图像的饱和度(仅适用于相机)
cv2.CAP_PROP_HUE 13 图像的色相(仅适用于相机)
cv2.CAP_PROP_GAIN 14 图像的增益(仅适用于相机)
cv2.CAP_PROP_EXPOSURE 15 曝光(仅适用于相机)
cv2.CAP_PROP_CONVERT_RGB 16 表示图像是否应转换为RGB的布尔标志
cv2.CAP_PROP_WHITE_BALANCE 17
cv2.CAP_PROP_RECTIFICATION 18 立体摄像机的整流标志
应用

从摄像头获取视频,并将其转换为灰度视频并显示它.
代码 :

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"):#若检测到按键 ‘q’,退出
        break

# When everything done, release the capture
cap.release()#释放摄像头
cv2.destroyAllWindows()#删除全部窗口

Note :最后不要忘记release capture

1从文件获取视频

使用cv2.VideoCapture()获取视频.

cv2.VideoCapture(builtins.object)

与从摄像头获取视频相同,只是参数为视频文件的名称.

应用

代码 :

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

Note :

应为cv2.waitKey选择恰当的时间,如果设置太小,视频播放将非常快,如果设置太大,视频将显示慢动作,一般设置25毫秒.

在使用Video Capture时应确保安装了正确版本的ffmpeggstreamer.

3保存视频

使用cv2.VideoWriter()保存视频.

cv2.VideoWriter()

首先创建一个VideoWriter对象并指定输出文件名(例如:output.avi)。然后指定FourCC代码。然后应该传递每秒帧数(fps)和帧大小。最后一个是isColor标志。如果是True,则编码器需要彩色帧,否则它适用于灰度帧。

FourCC
用于指定视频编解码器的4字节代码,可以在fourcc.org中找到可用代码列表。它取决于平台.

•在Fedora中:DIVX,XVID,MJPG,X264,WMV1,WMV2.(XVID更为可取.MJPG会产生高大小的视频.X264可以提供非常小的视频)
•在Windows中:DIVX(更多要测试和添加)
•在OSX中:MJPG(.mp4),DIVX(.avi),X264(.mkv)

FourCC代码通过cv2.VideoWriter_fourcc()传递
比如:
对于MJPG,FourCC代码作为cv2.VideoWriter_fourcc("M","J","P","G")cv2.VideoWriter_fourcc(*"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()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41970.html

相关文章

  • Python Opencv中基础的知识点

      怎么从0到1学习Python呢?Python中的知识点,涉及到内容主要是Python Opencv,用于人工智能,机器学习模拟相关的数据,那么,里面的一些较为基础的知识点,涉及到的内容是什么呢?下面就给大家详细解答下。  OpenCV是一个流行的开源计算机视觉库,可用于不同的编程语言,例如Python、C++和JavaScript。它提供了一套丰富的工具来处理和分析图像和视频,让你可以从调整单...

    89542767 评论0 收藏0
  • 分分钟自制人脸识别(如何快速识别心仪的小姐姐~)

    摘要:已录入图片效果到这里一个最基本的识别就做好了,那么关于这里面的惩罚机制或者通过识别后的机制其实,如果可以结合树莓派的话是可以自己做一个寝室专用的门禁系统的。 文章...

    hatlonely 评论0 收藏0
  • 人脸识别实战:使用Python OpenCV 和深度学习进行人脸识别

    摘要:在本教程中,您将学习如何使用和深度学习执行面部识别。理解深度学习人脸识别嵌入那么,深度学习人脸识别是如何运作的呢秘诀是一种称为深度度量学习的技术。使用和深度学习对人脸进行编码在识别图像和视频中的人脸之前,我们首先需要量化训练集中的人脸。 ...

    BigTomato 评论0 收藏0
  • 嵌入式系统作业3

    摘要:效果图如下四,使用示例视频虚拟机获取摄像头权限使用快捷键,输入,并回车。找到服务,确保启动了。这次作业新编辑技能,之前用的这次学习了用可以创建新的目录,这样会有序很多。 ...

    ymyang 评论0 收藏0
  • 1.opencv—图像处理基础

    摘要:函数返回一个对象即数组数组元素为图像的像素。使用数组来保存图像数组的数组形状数据类型数组元素个数等属性表示图像的相关属性。使用单通道的二维数组来表示灰度图像。 o...

    番茄西红柿 评论0 收藏2637

发表评论

0条评论

netmou

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<