python-opencv调用双目相机拍摄视频并保存

友情提示:本实验用的双目相机是一个usb口的,所以调用摄像头那里只需要调用一个设备号为0的相机,后续进行对左右相机画面显示并保存时需要先将整张图像进行分割。(若使用两个相机,则需要调用设备号为0和1的两个设备,此时图像显示保存时对两个设备同时操作即可,不需要对图像进行分割)

#调用双目摄像头录像,按q退出录制

import cv2 as cv2
import time

cv2.namedWindow('left')
cv2.namedWindow('right')

camera = cv2.VideoCapture(0)  # 打开摄像头,摄像头的ID不同设备上可能不同

camera.set(cv2.CAP_PROP_FRAME_WIDTH, 2560)  # 设置双目的宽度(整个双目相机的图像宽度)
camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)  # 设置双目的高度

fourcc=cv2.VideoWriter_fourcc(*'XVID')       # fourcc编码为视频格式,avi对应编码为XVID
left=cv2.VideoWriter("D:/test/savevideo/zuo.avi",fourcc,20.0,(1280,720))    #(视频储存位置和名称,储存格式,帧率,视频大小)
right=cv2.VideoWriter("D:/test/savevideo/you.avi",fourcc,20.0,(1280,720))

while camera.isOpened():
    ret, frame = camera.read()
    print('ret:', ret)
    left_frame = frame[0:720, 0:1280]  # 裁剪坐标为[y0:y1,x0:x1]
    right_frame = frame[0:720, 1280:2560]
    if not ret:
        break

    left.write(left_frame)
    right.write(right_frame)
    cv2.imshow('left', left_frame)
    cv2.imshow('right', right_frame)

    if cv2.waitKey(1) == ord('q'):
        break

camera.release()
left.release()
right.release()
cv2.destroyAllWindows()

拍摄双目图像并保存代码:https://blog.csdn.net/weixin_47214888/article/details/129101427?spm=1001.2014.3001.5501

### 如何在 Windows 上使用 ZED SDK 录制双目摄像头视频 要在 Windows 系统上使用 ZED SDK 录制双目摄像头视频,可以通过以下方式实现。ZED SDK 支持多种功能,包括录制 `.svo` 文件格式的视频,该格式能够存储立体视频数据以及其他传感器信息。 #### 安装 ZED SDK on Windows 首先需要安装适合 Windows 的 ZED SDK 版本。可以从 Stereolabs 官方网站下载最新版本的 ZED SDK 按照官方文档完成安装过程[^1]。确保系统满足最低硬件和软件需求,例如支持 CUDA 的显卡(如果计划使用 GPU 加速)以及兼容的操作系统版本。 #### 使用 API 进行录制 通过 ZED SDK 提供的 C++ 或 Python 接口可以轻松启动录制功能。下面展示了一个简单的 C++ 示例程序来说明如何配置开始录制: ```cpp #include <sl/Camera.hpp> using namespace sl; int main() { Camera zed; // 创建相机对象 InitParameters init_params; init_params.camera_resolution = RESOLUTION::HD720; // 设置分辨率 init_params.depth_mode = DEPTH_MODE::PERFORMANCE; // 配置深度模式 init_params.coordinate_units = UNIT::METER; // 单位设置为米 Status status = zed.open(init_params); // 打开相机 if (status != SUCCESS) { // 错误处理 std::cout << "Error opening the camera." << std::endl; return -1; } RecordingParameters recording_param("output.svo", SVO_COMPRESSION_MODE::LOSSLESS); status = zed.enableRecording(recording_param); // 启动录制 if (status != SUCCESS) { std::cout << "Failed to start recording..." << std::endl; return -1; } RuntimeParameters runtime_parameters; Mat image, depth; while (!zed.isClosed()) { if (zed.grab(runtime_parameters) == SUCCESS) { // 获取新帧 zed.retrieveImage(image, VIEW::LEFT); // 左图像获取 zed.retrieveMeasure(depth, MEASURE::DEPTH); // 深度测量 } } zed.disableRecording(); // 停止录制 zed.close(); // 关闭相机资源 } ``` 上述代码展示了如何初始化 ZED 相机、开启录制将输出保存为 `.svo` 文件的过程。注意,在实际部署前需调整参数以适应具体应用场景的需求。 对于 Python 用户而言,也有类似的接口可供调用: ```python import pyzed.sl as sl def main(): # 初始化相机参数 init = sl.InitParameters() init.camera_resolution = sl.RESOLUTION.HD720 cam = sl.Camera() status = cam.open(init) if status != sl.ERROR_CODE.SUCCESS: print("Camera failed to open.") exit(1) path = "record_output.svo" recording_param = sl.RecordingParameters(path, sl.SVoCompressionMode.LOSSLESS) err = cam.enable_recording(recording_param) if err != sl.ERROR_CODE.SUCCESS: print("Failed to enable recording...") exit(1) runtime = sl.RuntimeParameters() mat = sl.Mat() print("Press 'q' to quit program.") key = '' while key != ord('q'): if cam.grab(runtime) == sl.ERROR_CODE.SUCCESS: cam.retrieve_image(mat, sl.VIEW.LEFT) cam.disable_recording() cam.close() if __name__ == "__main__": main() ``` 此脚本同样实现了基本的功能——连接至 ZED 双目摄像设备,将其捕获的数据记录下来作为 `.svo` 文件存档。 #### 注意事项 - **环境依赖**:确认已正确安装所有必要的库和支持工具链,比如 Visual Studio 和对应版本的 NVIDIA CUDA Toolkit 如果适用的话。 - **性能优化**:依据目标平台特性选择合适的压缩算法与质量等级平衡文件大小同实时性之间的关系。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值