03 打开摄像头

03 打开摄像头


3.0 目标

  • 打开摄像头
  • 播放本地视频

3.1 打开摄像头

例 3.1.1

# Turn on the camera and grayscale it
import cv2

capture = cv2.VideoCapture(0)

while(True):
    # Get a frame
    ret, frame = capture.read()
    # Convert this frame to grayscale
    gray = cv2.cv2Color(frame, cv2.COLOR_BGR2GRAY)
    
    cv2.imshow( frame , gray)
    if cv2.waitKey(1) == ord( q ):
        break

说明 3.1.1

cv2.VideoCapture() 使用摄像头

  • 参数: 指摄像头编号, 第一个为 0 , 如果是笔记本就是笔记本自带摄像头, 第 2 个摄像头就是 1 , 依此类推. 如果是本地路径, 则播放本地视频, 详见下节.

capture.read() 返回两个参数

  • 返回参数 1 : 如本例 ret (return value) , 它是一个布尔值, 表明当前这一帧是否获取正确.
  • 返回参数 2 : 一帧.

cv2.cv2Color() 用来转换颜色

  • 参数 1 : 要转换的对象
  • 参数 2 : 转换类型, 本例, cv2.COLOR_BGR2GRAY 将彩色 BGR 图转成灰度图.

例 3.1.2

# Get the resolution of the capture
# propID can be written directly as a number or as an OpenCV symbol
width, height = capture.get(3), capture.get(4)
print(width, height)

# Capture at twice the original resolution
capture.set(cv2.CAP_PROP_FRAME_WIDTH, width * 2)
capture.set(cv2.CAP_PROP_FRAME_HEIGHY, height * 2)

capture.get(propID) 可以获取摄像头的一些属性, 列如捕获的分辨率, 亮度和对比度等.

  • 参数 propID : 从 0~18 的数字, 代表不同的属性, 可以参考 VideoCaptureProperties .

capture.set(propID, value) 可以修改属性值

  • 参数 1 : 同上
  • 参数 2 : 修改属性值

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

3.2 播放本地视频

例 3.2.1

# Play local video
capture = cv2.VideoCapture( demo_video.mp4 )

while(capture.isOpened()):
    ret, frame = capture.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

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

把摄像头编号换成视频的路径就可以播放本地视频. cv2.waitKey() 表明暂停的时间, 值越大, 视频播放速度越慢, 反之则相反, 一般设置为 25 或 30 .

3.3 录制视频

例 3.3.1

capture = cv2.VideoCapture(0)

# Define encoding and create a VideoWriter object
fourcc = cv2.VideoWriter_fourcc(* MJPG )
outfile = cv2.VideoWriter( output.avi , fourcc, 25., (640, 480))

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

    if ret:
        outfile.write(frame)  # Write file
        cv2.imshow( frame , frame)
        if cv2.waitKey(1) == ord( q ):
            break
    else:
        break

cv2.VideoWriter() 保存视频

  • 参数 1 : 输出的文件名
  • 参数 2 : 编码方式, 如 FourCC 码.
  • 参数 3 : 帧率 FPS
  • 参数 4 : 要保存的分辨率大小

cv2.VideoWriter_fourcc() 用来指定视频编码方式的四字节码, 所有的编码可参考 Video Codecs . 如 MJPG 编码可以这样写: cv2.VideoWriter_fourcc(* MJPG )cv2.VideoWriter_fourcc( M , J , P , G )

3.4 小结

cv2.VideoCapture() 创建视频对象, 在循环中一帧帧显示图像. 参数为数字打开摄像头, 参数为本地视频路径表明播放本地视频.

3.5 练习

  • 实现一个可以拖动滑块播放视频的功能.
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容