Skip to content

Instantly share code, notes, and snippets.

@adujardin
Last active October 19, 2020 15:54
Show Gist options
  • Save adujardin/1de520bae536c9991b75b542b09fac16 to your computer and use it in GitHub Desktop.
Save adujardin/1de520bae536c9991b75b542b09fac16 to your computer and use it in GitHub Desktop.
OpenCV Mat <-> ZED SDK Mat
inline cv::Mat slMat2cvMat(const sl::Mat& input) {
int cv_type = -1;
switch (input.getDataType()) {
case sl::MAT_TYPE::F32_C1: cv_type = CV_32FC1;
break;
case sl::MAT_TYPE::F32_C2: cv_type = CV_32FC2;
break;
case sl::MAT_TYPE::F32_C3: cv_type = CV_32FC3;
break;
case sl::MAT_TYPE::F32_C4: cv_type = CV_32FC4;
break;
case sl::MAT_TYPE::U8_C1: cv_type = CV_8UC1;
break;
case sl::MAT_TYPE::U8_C2: cv_type = CV_8UC2;
break;
case sl::MAT_TYPE::U8_C3: cv_type = CV_8UC3;
break;
case sl::MAT_TYPE::U8_C4: cv_type = CV_8UC4;
break;
default: break;
}
return cv::Mat(input.getHeight(), input.getWidth(), cv_type, input.getPtr<sl::uchar1>(sl::MEM::CPU), input.getStepBytes(sl::MEM::CPU));
}
// Be careful about the memory owner, might want to use it like :
// cvMat2slMat(cv_mat).copyTo(sl_mat, sl::COPY_TYPE::CPU_CPU);
inline sl::Mat cvMat2slMat(const cv::Mat& input) {
sl::MAT_TYPE sl_type;
switch (input.type()) {
case CV_32FC1: sl_type = sl::MAT_TYPE::F32_C1;
break;
case CV_32FC2: sl_type = sl::MAT_TYPE::F32_C2;
break;
case CV_32FC3: sl_type = sl::MAT_TYPE::F32_C3;
break;
case CV_32FC4: sl_type = sl::MAT_TYPE::F32_C4;
break;
case CV_8UC1: sl_type = sl::MAT_TYPE::U8_C1;
break;
case CV_8UC2: sl_type = sl::MAT_TYPE::U8_C2;
break;
case CV_8UC3: sl_type = sl::MAT_TYPE::U8_C3;
break;
case CV_8UC4: sl_type = sl::MAT_TYPE::U8_C4;
break;
default: break;
}
return sl::Mat(input.cols, input.rows, sl_type, input.data, input.step, sl::MEM::CPU);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment