当前位置: 首页 > article >正文

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 中 摄像头读取的相关操作。在摄像头读取时,可能会出现画面延迟,导致读取到的往往不是最新的画面,下期将介绍解决方法。


http://www.kler.cn/a/375846.html

相关文章:

  • HTML静态网页成品作业(HTML+CSS)——自行车介绍网页设计制作(1个页面)
  • EasyPlayer.js网页播放器,支持FLV、HLS、WebSocket、WebRTC、H.264/H.265、MP4、ts各种音视频流播放
  • PVE定时开启关闭虚拟机,实现PVE中群晖虚拟机的定时开机和关闭
  • 第八届御网杯线下赛Pwn方向题解
  • Ethernet 系列(6)-- 基础学习::OSI Model
  • 【私聊记录】最近在忙什么啊?听说你在学人工智能?
  • 二叉树选择题
  • 11.01学习
  • Linux云计算 |【第五阶段】CLOUD-DAY7
  • Shell 编程-Shell三剑客 Grep 学习
  • K8s pod 调度策略
  • 数据库相关概念
  • leaflet 地图基础应用篇
  • ssh和ssl的区别在哪些方面?
  • Facebook群控策略详解
  • 基于微信小程序的公务员考试信息查询系统+LW示例参考
  • 农作物病害图像分割系统:深度学习检测
  • UniFormat工具发布V1
  • 如何判断两个IP是否属于同一网段
  • C#使用Socket实现分布式事件总线,不依赖第三方MQ
  • 插件式模块化软件框架的思想图解一(框架篇)
  • 鸿蒙生态下的开发机遇与挑战
  • vue2+antd1.x中select和a-range-picker使用getPopupContainer和getCalendarContainer
  • Spring 配置文件敏感数据加密
  • SQLite 语法
  • 【React】配置图标和题目