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

文章目录


一、上篇回顾

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

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

二、使用步骤

1. 调用摄像头的 API 介绍

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

cpp 复制代码
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. 代码示例

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

python3 复制代码
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. 代码分析

python3 复制代码
cap = cv2.VideoCapture(0)

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

python3 复制代码
ret, frame = cap.read()

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

python3 复制代码
cv2.imshow("Capture", frame)

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

cpp 复制代码
void cv::imshow(const String& winname, InputArray mat)	

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

python3 复制代码
if cv2.waitKey(0) == ord('q'):
    break

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

python3 复制代码
int cv::waitKey(int delay = 0)
  • delay < 0: 立即返回结果,不等待用户输入
  • delay = 0: 无限期等待直到用户输入
  • delay > 0: 等待指定时间 (ms) 后返回输入的内容。

返回的内容为 ASCII 值,因此需要进行转换,Python 中的 ord 函数可以将字符转换为 ASCII 值。


三、下篇预告

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

相关推荐
JAVA_AI人工智能项目实战11 分钟前
轻量级模型训练_RNN文本分类流水线实验代码
人工智能·rnn·分类
code2cat17 分钟前
【随笔】RAG混合检索:让关键词与向量一起找证据
人工智能·rag·混合检索
wflynn31 分钟前
GitHub 今日推荐|Edge0:让大号 MoE 模型在一台 Mac 上流式跑起来
python·开源·github
在所不辞兄38 分钟前
【零基础学智能仿真-67】力学知识库与检索增强
人工智能·深度学习·神经网络·机器学习·智能仿真
云上先途41 分钟前
下一代搜索优化重点优化哪些维度,和旧SEO思路有什么不同?
人工智能
楚山之石42 分钟前
【Lancet Neurology 】多发性硬化认知障碍的 SDMT 筛查、灰质萎缩标志与认知康复循证路径
图像处理·人工智能·学习·mri
2601_967980111 小时前
python之用scapy分层解析pcap报文(Ethernet帧、IP数据包、TCP数据包、UDP数据包、Raw数据包)
python·scapy·pcap·协议分析·网络数据包
心疼你的一切1 小时前
Python自动发邮件实战定时发报表
大数据·开发语言·python
海宇大数据1 小时前
零信任架构实战:基于海宇全能小微企业报告构建自动化持牌网络小贷小微商户极速助业贷秒级全维风险决策网关
网络·人工智能·架构·自动化
hkNaruto1 小时前
【AI】基于大模型的AI游戏地图生成、控制方案:AI Native Game Harness 迁移操作手册
前端·人工智能·游戏