§ 2.1 彩色视频流读取
1. 导入依赖
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 奥比中光 Orbbec Python SDK
from ObTypes import *
from Property import *
import Pipeline
import StreamProfile
from Error import ObException
import Context
2. 配置日志等级
配置日志等级为ERROR。下面这段代码非常必要,否则调试信息会刷屏。
ctx = Context.Context(None)
ctx.setLoggerSeverity(OB_PY_LOG_SEVERITY_ERROR)
3. 创建管道
# 创建图像管道
pipe = Pipeline.Pipeline(None, None)
# 配置视频流, 控制开启/关闭
config = Pipeline.Config()
4. 配置彩色相机
# 获取彩色相机的所有流配置,包括流的分辨率,帧率,以及帧的格式
profiles = pipe.getStreamProfileList(OB_PY_SENSOR_COLOR)
# 看一共有多少彩图的视频流格式/分辨率/编码方式选项
item_num = profiles.count()
print(f"彩色视频流可选类型: {item_num}")
输出日志 :
彩色视频流可选类型: 80
# 选择默认的彩色视频流配置
color_profile = profiles.getProfile(0)
# 图像编码类型 MJPG
color_profile.format() == OB_PY_FORMAT_MJPG
输出日志 :
True
# 图像类型 彩图 OB_PY_SENSOR_COLOR
color_profile.type() == OB_PY_SENSOR_COLOR
输出日志 :
True
# 构建更具体的彩色相机的信息
color_profile = color_profile.toConcreteStreamProfile(OB_PY_STREAM_VIDEO)
img_width = color_profile.width()
img_height = color_profile.height()
print(f"图像宽度: {img_width}")
print(f"图像高度: {img_height}")
输出日志 :
图像宽度: 1280 图像高度: 720
fps = color_profile.fps()
print(f"相机帧率: {fps}")
相机帧率: 30
输出日志 :
图像宽度: 1280 图像高度: 720
使能视频流
# 使能彩色视频流
config.enableStream(color_profile)
# 管道开启视频流
pipe.start(config, None)
5. 采集图像
# 等待数据输入
timeout_ms = 100 # 超时等待时间, 单位ms
# 等待数据传入
frames = pipe.waitForFrames(timeout_ms)
if frames is None:
print("数据获取失败")
# 获取彩图
color_frame = frames.colorFrame()
if color_frame is None:
print("彩图获取失败")
# 获取数据尺寸
size = color_frame.dataSize()
# 获取数据
data = color_frame.data()
# 图像解码
data_decode = cv2.imdecode(data, 1)
# 重新缩放
color_img = np.resize(data_decode,(img_height, img_width, 3))
plt.imshow(color_img[:, :, ::-1])
输出日志 :