OPENCV摄像头读取视频的实现示例

Written by

in

文章目录
  • 以下是几种使用 OpenCV 读取摄像头的常见方法:
  • ret, frame = cap.read() 第一个返回值 (ret):布尔值(True/False),表示帧是否成功读取 第二个返回值 (frame):如果读取成功,这是一个包含图像数据的 NumPy 数组 # 显示一帧图像 cv2.imshow(‘frame’, frame) # 如果按下’q’键,退出循环 if cv2.waitKey(1) & 0xFF == ord(‘q’): break 到此这篇关于OPENCV摄像头读取视频的实现示例的文章就介绍到这了,更多相关OPENCV摄像头读取视频内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: C#使用OpenCvSharp4库读取电脑摄像头数据并实时显示 C/C++中的OpenCV读取视频与调用摄像头 C#借助OpenCvSharp读取摄像头并显示的实现示例 Python OpenCV超详细讲解读取图像视频和网络摄像头 基于OpenCV读取摄像头实现单个人脸验证MFC程序 Opencv实现读取摄像头和视频数据
  • 目录
    • OpenCV 读取摄像头的代码示例
      • 1. 基础摄像头读取
      • 2. 设置摄像头参数
      • 3. 多摄像头读取
      • 4. 保存视频流
      • 5. 带简单图像处理的摄像头读取
    • 部分api解释:

      以下是几种使用 OpenCV 读取摄像头的常见方法:

      import cv2
      
      # 打开默认摄像头(通常是0)
      cap = cv2.VideoCapture(0)
      
      # 检查摄像头是否成功打开
      if not cap.isOpened():
          print("无法打开摄像头")
          exit()
      
      print("摄像头已打开,按 'q' 键退出")
      
      while True:
          # 读取一帧
          ret, frame = cap.read()
          
          # 检查帧是否读取成功
          if not ret:
              print("无法读取帧")
              break
          
          # 显示帧
          cv2.imshow('摄像头', frame)
          
          # 按'q'键退出
          if cv2.waitKey(1) & 0xFF == ord('q'):
              break
      
      # 释放资源
      cap.release()
      cv2.destroyAllWindows()

      import cv2
      
      cap = cv2.VideoCapture(0)
      
      # 设置摄像头参数
      cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)   # 宽度
      cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)  # 高度
      cap.set(cv2.CAP_PROP_FPS, 30)            # 帧率
      
      # 获取实际参数值
      width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
      height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
      fps = cap.get(cv2.CAP_PROP_FPS)
      
      print(f"摄像头分辨率: {width}x{height}, 帧率: {fps}")
      
      while True:
          ret, frame = cap.read()
          if not ret:
              break
          
          # 在画面上显示信息
          cv2.putText(frame, f"分辨率: {int(width)}x{int(height)}", (10, 30), 
                      cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
          cv2.putText(frame, f"帧率: {fps}", (10, 60), 
                      cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
          
          cv2.imshow('摄像头', frame)
          
          if cv2.waitKey(1) & 0xFF == ord('q'):
              break
      
      cap.release()
      cv2.destroyAllWindows()

      import cv2
      
      # 尝试打开多个摄像头
      caps = []
      for i in range(3):  # 尝试打开0,1,2号摄像头
          cap = cv2.VideoCapture(i)
          if cap.isOpened():
              caps.append(cap)
              print(f"摄像头 {i} 已连接")
          else:
              print(f"摄像头 {i} 未连接")
      
      if not caps:
          print("没有可用的摄像头")
          exit()
      
      print(f"共找到 {len(caps)} 个摄像头")
      
      while True:
          frames = []
          for i, cap in enumerate(caps):
              ret, frame = cap.read()
              if ret:
                  # 在每帧上标记摄像头编号
                  cv2.putText(frame, f"Camera {i}", (10, 30), 
                              cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
                  frames.append(frame)
          
          if not frames:
              break
          
          # 合并显示多个摄像头画面
          if len(frames) == 1:
              combined = frames[0]
          elif len(frames) == 2:
              combined = cv2.hconcat(frames)
          else:
              # 对于3个或更多摄像头,可以调整布局
              top = cv2.hconcat(frames[:2])
              bottom = cv2.hconcat(frames[2:]) if len(frames) > 2 else frames[2]
              combined = cv2.vconcat([top, bottom]) if len(frames) > 2 else top
          
          cv2.imshow('多摄像头', combined)
          
          if cv2.waitKey(1) & 0xFF == ord('q'):
              break
      
      # 释放所有摄像头
      for cap in caps:
          cap.release()
      cv2.destroyAllWindows()

      import cv2
      
      cap = cv2.VideoCapture(0)
      
      # 设置视频编码器和输出文件
      fourcc = cv2.VideoWriter_fourcc(*'XVID')
      out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
      
      recording = False
      print("按 'r' 开始/停止录制,按 'q' 退出")
      
      while True:
          ret, frame = cap.read()
          if not ret:
              break
          
          # 如果正在录制,保存帧
          if recording:
              out.write(frame)
              cv2.putText(frame, "录制中...", (10, 30), 
                          cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
          
          cv2.imshow('摄像头', frame)
          
          key = cv2.waitKey(1) & 0xFF
          if key == ord('q'):
              break
          elif key == ord('r'):
              recording = not recording
              print("录制" if recording else "停止录制")
      
      cap.release()
      out.release()  # 释放视频写入器
      cv2.destroyAllWindows()

      import cv2
      import numpy as np
      
      cap = cv2.VideoCapture(0)
      
      mode = 0  # 0: 原图, 1: 灰度, 2: 边缘检测, 3: 模糊
      modes = ['原图', '灰度', '边缘检测', '模糊']
      
      print("按 'm' 切换模式,按 'q' 退出")
      
      while True:
          ret, frame = cap.read()
          if not ret:
              break
          
          # 根据模式处理图像
          if mode == 1:
              processed = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
              processed = cv2.cvtColor(processed, cv2.COLOR_GRAY2BGR)  # 转回BGR用于显示
          elif mode == 2:
              gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
              processed = cv2.Canny(gray, 100, 200)
              processed = cv2.cvtColor(processed, cv2.COLOR_GRAY2BGR)
          elif mode == 3:
              processed = cv2.GaussianBlur(frame, (15, 15), 0)
          else:
              processed = frame.copy()
          
          # 显示当前模式
          cv2.putText(processed, f"模式: {modes[mode]}", (10, 30), 
                      cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
          
          cv2.imshow('摄像头', processed)
          
          key = cv2.waitKey(1) & 0xFF
          if key == ord('q'):
              break
          elif key == ord('m'):
              mode = (mode + 1) % len(modes)
              print(f"切换到模式: {modes[mode]}")
      
      cap.release()
      cv2.destroyAllWindows()

      ret, frame = cap.read()

      • 第一个返回值 (ret):布尔值(True/False),表示帧是否成功读取
      • 第二个返回值 (frame):如果读取成功,这是一个包含图像数据的 NumPy 数组
      # 显示一帧图像
          cv2.imshow('frame', frame)
      
          # 如果按下'q'键,退出循环
          if cv2.waitKey(1) & 0xFF == ord('q'):
              break

      到此这篇关于OPENCV摄像头读取视频的实现示例的文章就介绍到这了,更多相关OPENCV摄像头读取视频内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

      您可能感兴趣的文章:

      • C#使用OpenCvSharp4库读取电脑摄像头数据并实时显示
      • C/C++中的OpenCV读取视频与调用摄像头
      • C#借助OpenCvSharp读取摄像头并显示的实现示例
      • Python OpenCV超详细讲解读取图像视频和网络摄像头
      • 基于OpenCV读取摄像头实现单个人脸验证MFC程序
      • Opencv实现读取摄像头和视频数据

      站内搜索