(ง •_•)ง[Python3 OpenCV4]3.视频操作

举报
鱼酱 发表于 2022/01/06 22:23:11 2022/01/06
【摘要】 文章目录 接口文档打开摄像头播放本地视频录制视频 接口文档 VideoCapture ObjectVideoWriter Objectcv2.cvtColor() 打开摄像头 ...


接口文档

打开摄像头

使用摄像头,需要使用cv2.VideoCapture(0)创建VideoCapture对象,参数0指的是摄像头的编号,如果你电脑上有两个摄像头的话,访问第2个摄像头就可以传入1,依此类推。

import cv2
#
capture = cv2.VideoCapture(0)

if None == capture:
    print("摄像头打开失败")

while(True):
    # 获取一帧
    ret, frame = capture.read()
    if ret == False:
        continue
    # 将这帧转换为灰度图
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

VideoCaptureProperties

  • cv2.CAP_PROP_POS_MSEC
    视频文件的当前位置(毫秒)。
  • cv2.CAP_PROP_POS_FRAMES
    下一步要解码/捕获的帧的基于0的索引。
  • cv.2CAP_PROP_POS_AVI_RATIO
    视频文件的相对位置:0=胶片开始,1=胶片结束。
import cv2
#打开 0号摄像头
capture = cv2.VideoCapture(0)
# 获取捕获的分辨率
# propId可以直接写数字,也可以用OpenCV的符号表示
width, height = capture.get(3), capture.get(4)
print(width, height)

# 以原分辨率的一倍来捕获
capture.set(cv2.CAP_PROP_FRAME_WIDTH, width * 2)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, height * 2)

# 某些摄像头设定分辨率等参数时会无效,因为它有固定的分辨率大小支持,一般可在摄像头的资料页# 中找到


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

播放本地视频

播放视频其实跟打开摄像头的操作一样

我们也可以获取视频分辨率、帧率、当前播放帧等等信息,可以查看
VideoCapture Object
结构就可以看到信息了~~~~~~~~~~

eg:

import cv2

# 播放本地视频
capture = cv2.VideoCapture('wzry.mp4')


#打印一些视频的信息
print(capture.get(cv2.CAP_PROP_POS_MSEC))

width = capture.get(cv2.CAP_PROP_FRAME_WIDTH)
height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT)

print("分辨率:%f,%f"%(width,height))

print("休息一会")

while(capture.isOpened()):
    ret, frame = capture.read()
    if  False == ret:        
        print("视频播放完毕~~~")
        break
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame', gray)
    if cv2.waitKey(30) == ord('q'):
        print("手动退出了~~~~")
        break

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

录制视频

关于视频四字节码,可以去这个网站查看

http://www.fourcc.org/codecs.php

如下功能是读取一个视频,转存成另一个视频

import cv2

# 定义编码方式并创建VideoWriter对象
# 指定视频编码方式的四字节码
'''
cv2.VideoWriter_fourcc('P','I','M','1') = MPEG-1 codec  
cv2.VideoWriter_fourcc('M','J','P','G') = motion-jpeg codec   --> mp4v
cv2.VideoWriter_fourcc('M', 'P', '4', '2') = MPEG-4.2 codec
cv2.VideoWriter_fourcc('D', 'I', 'V', '3') = MPEG-4.3 codec
cv2.VideoWriter_fourcc('D', 'I', 'V', 'X') = MPEG-4 codec     --> avi
cv2.VideoWriter_fourcc('U', '2', '6', '3') = H263 codec
cv2.VideoWriter_fourcc('I', '2', '6', '3') = H263I codec
cv2.VideoWriter_fourcc('F', 'L', 'V', '1') = FLV1 codec
'''

#视频读取
capture = cv2.VideoCapture('wzry.mp4')
#获取FPS
video_fps = capture.get(cv2.CAP_PROP_FPS)
#获取宽度、高度
video_width = capture.get(cv2.CAP_PROP_FRAME_WIDTH)
video_height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT)
video_size =(int(video_width),int(video_height))

#获取视频编码方式的四字节码
codec = capture.get(cv2.CAP_PROP_FOURCC)
#strcodec = chr(codec&0xFF) + chr((codec>>8)&0xFF) + chr((codec>>16)&0xFF) + chr((codec>>24)&0xFF)
#print ('codec is ' + strcodec)

outfile = cv2.VideoWriter('output.mp4', int(codec), video_fps, video_size)

while(capture.isOpened()):    
    ret, frame = capture.read()
    if ret:
        outfile.write(frame)  # 写入文件
        cv2.imshow('frame', frame)
        if cv2.waitKey(1) == ord('q'):
            break
    else:
        break

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

文章来源: yujiang.blog.csdn.net,作者:鱼酱2333,版权归原作者所有,如需转载,请联系作者。

原文链接:yujiang.blog.csdn.net/article/details/104152500

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。