published on in Python

影像处理・调用摄像头

返回教程主页

上篇 影像处理・OpenCV简介

影像处理免不了读取视频和调用摄像头,在OpenCV中可以使用VideoCapture工具快速完成视频读取以及摄像头调用。

读取并播放视频

调用VideoCapture的时候如果传入一个视频文件的路径作为参数则可以读取该视频文件:

import cv2 as cv

video = cv.VideoCapture('/home/kk/影片/mytest.mp4')
while video.isOpened():
    ret, frame = video.read()
    if ret == True:
        cv.imshow('My Video', frame)
        if cv.waitKey(100) & 0xFF == ord('q'):
            break
    else:
        break
video.release()
cv.destroyAllWindows()
  • 以字符串的形式传入一个文件路径,调用VideoCapture读取视频;
  • 使用video.isOpened判断是否正确打开,如果是则开始循环读取;
  • 使用video.read读取每一帧视频影像,返回的ret用于判断是否成功读取,frame为影像的numpy数组;
  • 仍旧使用cv.imshow显示,并用cv.waitKey等待100毫秒「不一定非得用100」来控制播放速度,当接受到键盘输入q时退出;
  • 在结束循环读写后需要记得释放视频资源video.release,以及销毁窗口cv.destroyAllWindows

打开并读取摄像头

调用VideoCapture的时候如果传入一个整数0则可以读取电脑默认摄像头:

import cv2 as cv

video = cv.VideoCapture(0)
while video.isOpened():
    ret, frame = video.read()
    if ret == True:
        cv.imshow('My Video', frame)
        if cv.waitKey(100) & 0xFF == ord('q'):
            break
    else:
        break
video.release()
cv.destroyAllWindows()

传入到cv.VideoCapture的整数0可以理解为摄像头的索引编号,如果你有多个摄像头比如两个,则可以尝试使用编号:0或1;有三个摄像头,则可以尝试使用编号:0、1或2。

下篇 影像处理・网络摄像头