任务步骤:

  1. 安装所需的软件和库。
  2. 准备两个相机,并连接到计算机。
  3. 初始化相机并设置视频的分辨率和帧率。
  4. 从两个相机中获取实时视频帧。
  5. 对每一对帧进行立体匹配,得到深度图像。
  6. 根据深度图像计算人脸到左右相机之间的距离。
  7. 在视频帧上绘制出人脸和距离信息。
  8. 循环执行步骤4至7,实现实时显示。

样例代码:

import cv2
import numpy as np

def calculate_distance(disparity, focal_length, baseline):
    distance = focal_length * baseline / disparity
    return distance

def main():
    # 初始化相机
    left_camera = cv2.VideoCapture(0)
    right_camera = cv2.VideoCapture(1)
    
    # 设置视频分辨率和帧率
    left_camera.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
    left_camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
    left_camera.set(cv2.CAP_PROP_FPS, 30)
    right_camera.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
    right_camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
    right_camera.set(cv2.CAP_PROP_FPS, 30)
    
    # 设置相机参数
    focal_length = 1.0  # 相机焦距
    baseline = 1.0  # 左右相机之间的基线距离
    
    while True:
        # 获取左右相机的实时视频帧
        ret1, left_frame = left_camera.read()
        ret2, right_frame = right_camera.read()
        
        if not ret1 or not ret2:
            break
        
        # 立体匹配得到深度图像
        stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)
        gray_left = cv2.cvtColor(left_frame, cv2.COLOR_BGR2GRAY)
        gray_right = cv2.cvtColor(right_frame, cv2.COLOR_BGR2GRAY)
        disparity = stereo.compute(gray_left, gray_right)
        
        # 计算人脸到左右相机之间的距离
        distance = calculate_distance(disparity, focal_length, baseline)
        
        # 在视频帧上绘制人脸和距离信息
        cv2.putText(left_frame, f"Distance: {distance} m", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
        cv2.imshow("Video", left_frame)
        
        # 按下q键退出程序
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    # 释放相机资源
    left_camera.release()
    right_camera.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    main()

仿真结果: 在运行上述代码后,会打开两个相机的视频窗口,并在视频上实时显示人脸到左右相机之间的距离。具体效果会根据相机的质量和环境条件而有所不同


原文地址: http://www.cveoy.top/t/topic/hUbq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录