如何在OpenCV中同时显示图像/摄像头画面与终端窗口
使用OpenCV实现摄像头画面与终端同步显示及目标检测操作
核心逻辑
不用复杂的多进程操作,只需将「摄像头帧读取、目标检测推理、终端信息输出、画面渲染刷新」四个步骤放到同一个事件循环中执行即可,运行时终端和OpenCV窗口会同时工作互不干扰。
前置依赖安装
在终端执行以下命令安装依赖:
pip install opencv-python numpy
可运行示例代码
以下示例实现了人脸检测功能,运行后会同时弹出摄像头画面窗口,终端实时打印检测到的人脸数量,可直接替换为你自己的目标检测逻辑:
import cv2 # 初始化默认摄像头,设备ID一般为0,外接摄像头可改为1/2等 cap = cv2.VideoCapture(0) # 加载OpenCV自带的人脸检测预训练模型,可替换为YOLO等自定义检测模型 face_detector = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') while True: # 读取一帧画面 ret, frame = cap.read() if not ret: print("无法读取摄像头画面,程序退出") break # 目标检测逻辑,可自定义替换 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = face_detector.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)) # 终端输出逻辑,可自定义输出检测类别、置信度、坐标等信息 if len(faces) > 0: print(f"*当前检测到{len(faces)}个人脸*") else: print("*未检测到目标*") # 渲染检测结果到画面 for (x, y, w, h) in faces: cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) # 显示摄像头画面 cv2.imshow("Camera Preview", frame) # 按q键退出程序,waitKey为必须调用的方法,否则画面无法正常刷新 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放资源 cap.release() cv2.destroyAllWindows()
运行方法
在终端直接执行以下命令即可:
python 你的脚本文件名.py
注意事项
- 如果需要运行算力消耗较大的目标检测模型,可将检测逻辑和终端输出逻辑放到独立子线程中执行,避免阻塞画面渲染导致卡顿
- Linux/Mac环境下如果出现摄像头权限不足的问题,可在运行命令前加sudo获取权限
- Windows系统需要先在系统设置中开启摄像头访问权限,否则程序无法正常调用摄像头
内容的提问来源于stack exchange,提问作者Tudor
相关产品推荐
相关产品推荐

