【问题标题】:Zed Camera - Get data in c++ with openCVZed Camera - 使用 openCV 在 c++ 中获取数据
【发布时间】:2017-02-25 08:31:44
【问题描述】:

我使用 Zed-Camera 来获取深度 (https://www.stereolabs.com/)。 我想在 c++ 中获取数据(使用 OpenCV 库)。

我从这里获取了代码: https://www.stereolabs.com/blog/index.php/2015/06/28/zed-with-opencv/

网站上的代码不起作用,因为一行没有编译:

sl::zed::ERRCODE err = zed->init(sl::zed::MODE::PERFORMANCE, 0, true);

我得到 2 个错误:

  1. 引用非常量的初始值必须是左值

  2. 函数调用中的参数过多。

我看了一下函数,函数get:

ERRCODE init(InitParams &parameters);

感谢您的帮助

【问题讨论】:

    标签: c++ opencv camera depth stereo-3d


    【解决方案1】:

    你可以做类似的事情。

    m_pZed = new sl::Camera();
    sl::InitParameters zedInit;
    zedInit.camera_buffer_count_linux = 4;
    zedInit.camera_disable_self_calib = false;
    zedInit.camera_fps = m_zedFPS;
    zedInit.camera_image_flip = m_bZedFlip;
    zedInit.camera_linux_id = 0;
    zedInit.camera_resolution = (sl::RESOLUTION) m_zedResolution;
    zedInit.coordinate_system = sl::COORDINATE_SYSTEM::COORDINATE_SYSTEM_IMAGE;
    zedInit.coordinate_units = sl::UNIT::UNIT_METER;
    zedInit.depth_minimum_distance = m_zedMinDist;
    zedInit.depth_mode = (sl::DEPTH_MODE) m_zedDepthMode;
    zedInit.sdk_gpu_id = -1;
    zedInit.sdk_verbose = true;
    
    sl::ERROR_CODE err = m_pZed->open(zedInit);
    if (err != sl::SUCCESS)
    {
        LOG(ERROR)<< "ZED Error code: " << sl::errorCode2str(err) << std::endl;
        return false;
    }
    
    m_pZed->setConfidenceThreshold(m_zedConfidence);
    m_pZed->setDepthMaxRangeValue((float) m_zedMaxDist);
    
    // Set runtime parameters after opening the camera
    m_zedRuntime.sensing_mode = (sl::SENSING_MODE) m_zedSenseMode;
    m_zedRuntime.enable_depth = true;
    m_zedRuntime.enable_point_cloud = false;
    m_zedRuntime.move_point_cloud_to_world_frame = false;
    
    // Create sl and cv Mat to get ZED left image and depth image
    sl::Resolution zedImgSize = m_pZed->getResolution();
    
    // Initialize color image and depth
    m_width = zedImgSize.width;
    m_height = zedImgSize.height;
    m_centerH = m_width / 2;
    m_centerV = m_height / 2;
    
    // Best way of sharing sl::Mat and cv::Mat :
    // Create a sl::Mat and then construct a cv::Mat using the ptr to sl::Mat data.
    
    m_pzDepth = new sl::Mat(zedImgSize, sl::MAT_TYPE_32F_C1, sl::MEM_GPU);
    m_gDepth = slMat2cvGpuMat(*m_pzDepth);
    m_gDepth2 = GpuMat(m_gDepth.size(), m_gDepth.type());
    

    更多细节可以在这里找到(https://github.com/yankailab/OpenKAI/blob/master/src/Vision/_ZED.cpp

    【讨论】:

      【解决方案2】:

      是的,您可以看到参数已更改为 InitParams。

      sl::zed::InitParams params;
      params.verbose = true;
      sl::zed::ERRCODE err = camera->init(params);
      

      【讨论】:

      • 谢谢,但现在我收到了很多类似 LNK2019 的错误。示例:错误 LNK2019:未解析的外部符号“void __cdecl cv::fastFree(void *)”(?fastFree@cv@@YAXPAX@Z) 在函数“public: __thiscall cv::Mat::~Mat(void)”中引用(??1Mat@cv@@QAE@XZ) 你知道为什么吗?谢谢:-)
      猜你喜欢
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 2016-01-31
      • 1970-01-01
      相关资源
      最近更新 更多