当前位置:   article > 正文

使用OpenCV调用摄像头和读取视频图片_opencv打开摄像头并捕捉图像

opencv打开摄像头并捕捉图像

1.1 调用摄像头

要捕获视频,你需要创建一个 VideoCapture 对象。它的参数是设备索引的名称。设备索引就是指定哪个摄像头的数字。正常情况下,内部摄像头可以通过传入0来调用,传递1来选择外置的第二个相机,以此类推。在此之后,你可以逐帧捕获。但是在最后,不要忘记释放俘虏。

import cv2
#捕获内部摄像头
cap = cv2.VideoCapture(0)
#判断摄像头是否能打开
if not cap.isOpened():
    print("Cannot open camera")
    exit()
while True:
    # 逐帧捕获
    ret, frame = cap.read()
    # 如果正确读取帧,ret为True
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    # 显示结果帧e
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) == ord('q'):
        break
# 完成所有操作后,释放捕获器
cap.release()
cv2.destroyAllWindows()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

直接运行上面代码即可调用摄像头。

1.2 读取视频

与相机捕获方法相同,只是用视频文件名更改摄像机索引。另外,在显示框架时,请使用适当的时间 cv.waitKey() 。如果太小,则视频将非常快,而如果太大,则视频将变得很慢。正常情况下25毫秒就可以了。

import cv2
#捕获内部摄像头
cap = cv2.VideoCapture('test.mp4')#视频文件路径
#判断摄像头是否能打开
if not cap.isOpened():
    print("Cannot open camera")
    exit()
while True:
    # 逐帧捕获
    ret, frame = cap.read()
    # 如果正确读取帧,ret为True
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    # 显示结果帧e
    cv2.imshow('frame', frame)
    if cv2.waitKey(25) == ord('q'):
        break
# 完成所有操作后,释放捕获器
cap.release()
cv2.destroyAllWindows()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

在这里插入图片描述

1.3 保存视频

如果我们读取了一个视频,并对其每一帧地进行了处理,如对每帧进行旋转或者加上文字等操作后,我们需要保存视频。或者我们想保存调用摄像头时的影像。

这时我们需要创建一个 VideoWriter 对象。指定输出文件名(例如: output.avi),然后指定 FourCC 代码,最后传递帧率的数量和帧大小。

import cv2
cap = cv2.VideoCapture(0)
# 定义编解码器并创建VideoWriter对象
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    frame = cv2.flip(frame, 0)#对帧进行处理
    # 写入翻转的框架
    out.write(frame)
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) == ord('q'):
        break
# 完成工作后释放所有内容
cap.release()
out.release()
cv2.destroyAllWindows()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

注意:cap = cv2.VideoCapture()也可填入视频文件路径则可以对视频文件进行处理,但要自动等程序结束后新保存的视频才能正常播放否则保存的视频文件会无法读取,因为帧数不全,所以对视频处理不要中间手动中断。摄像头的话随时可以手动停止。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/597849
推荐阅读
相关标签
  

闽ICP备14008679号