OpenCV Python 版使用教程(二)摄像头调用

文章目录

  • 一、上篇回顾
  • 二、使用步骤
  • 1. 调用摄像头的 API 介绍
  • 2. 代码示例
  • 3. 代码分析
  • 三、下篇预告

  • 一、上篇回顾

    在上一篇中,简单介绍了如何在 Windows 和 Ubuntu 两个环境下部署和安装 OpenCV,从本篇开始将逐步介绍 OpenCV 中的常见操作。

    本篇介绍 OpenCV 和摄像头的相关操作。

    二、使用步骤

    1. 调用摄像头的 API 介绍

    OpenCV 调用摄像头使用 cv2.VideoCapture ,API 如下:

    cv::VideoCapture::VideoCapture()
    cv::VideoCapture::VideoCapture(const String& filename)
    cv::VideoCapture::VideoCapture(const String& filename, int apiPreference)
    cv::VideoCapture::VideoCapture(int index)
    cv::VideoCapture::VideoCapture(int index, int apiPreference)
    

    从 API 中可以看出,OpenCV 的 VideoCapture 对象可以用 摄像头或者一个视频文件作为输入流,apiPreference 则指定了图像视频流处理的 API,这些 API 以 CAP_ 开头。

    2. 代码示例

    在编辑器中输入以下内容:

    import cv2
    
    cap = cv2.VideoCapture(0)
    
    while True:
        ret, frame = cap.read()
    
        if not ret:
            print("摄像头无法打开!")
            break
    
        cv2.imshow("Capture", frame)
    
        if cv2.waitKey(0) == ord('q'):
            break
    
    cv2.destroyAllWindows()
    

    如果运行正常,那么应该能看到摄像头的画面内容。

    3. 代码分析

    cap = cv2.VideoCapture(0)
    

    这里,0 指的是摄像头的位置,如果只有一个摄像头,一般来说都是 0,而如果有多个摄像头,则可以通过更改编号来切换摄像头,笔记本电脑自带的摄像头也是 0。

    ret, frame = cap.read()
    

    cap.read() 用于从视频流中读取一帧,函数返回两个参数,retbool 类型,用于判断是否成功读取视频帧,framenp.ndarray 类型,是一个数组,用于记录摄像头的信息。

    cv2.imshow("Capture", frame)
    

    imshow 函数用于显示画面,使用方法如下:

    void cv::imshow(const String& winname, InputArray mat)	
    

    第一个参数是窗口名称,第二个参数是要显示的图像,也就是前面的 frame

    if cv2.waitKey(0) == ord('q'):
        break
    

    waitKey 函数用于接收键盘输入,注意 只有在窗口中按下按键才有用,在终端或者其他地方无效

    int cv::waitKey(int delay = 0)
    
  • delay < 0: 立即返回结果,不等待用户输入
  • delay = 0: 无限期等待直到用户输入
  • delay > 0: 等待指定时间 (ms) 后返回输入的内容。
  • 返回的内容为 ASCII 值,因此需要进行转换,Python 中的 ord 函数可以将字符转换为 ASCII 值。


    三、下篇预告

    本篇简单介绍了 OpenCV 中 摄像头读取的相关操作。在摄像头读取时,可能会出现画面延迟,导致读取到的往往不是最新的画面,下期将介绍解决方法。

    作者:tianchengwang

    物联沃分享整理
    物联沃-IOTWORD物联网 » OpenCV Python 版使用教程(二)摄像头调用

    发表回复