MPSizectorS_SDK_Gray
应用简介
本应用使用 MPSizectorS_SDK 库处理读取 MPDat 格式的 SizectorS 3D 相机数据并生成深度图像。
应用流程
导入相关头文件和库,包括 OpenCV 和 MPSizectorS_SDK_Gray;
调用 MPSizectorS_Utils::Load() 函数加载 mpdat-float 数据;
使用 MPSizectorS_Utils::ConvertToFloat3DFrame() 将数据转换成 MPSizectorS_DataFrameFloat3DStruct 类型的数据,便于进行深度值计算;
获取图像的深度信息,使用 MPSizectorS_Utils::GetAutoColorDepthRange_Float3D() 函数获取;
修改每个像素的值,将深度值归一化到 0~255 的范围,并存储到 depthImg 矩阵中;
调用 OpenCV 的 imshow() 函数显示深度图像,调用 imwrite() 函数存储深度图像;
调用 waitKey() 函数等待按键并退出。
代码调用
本应用主要包含以下几个函数:
加载数据
该步骤用于加载 mpdat-float 格式的数据文件并读取其中的数据,将其转换为 MPSizectorS_DataFrameUndefinedStruct 类型的数据。
MPSizectorS_DataFrameUndefinedStruct data;
bool dev = MPSizectorS_Utils::Load(&data, "E:/SizectorS_SDK_Gray/test/SizectorS_DataExport5.mpdat");
其中,&data 是一个指向 MPSizectorS_DataFrameUndefinedStruct 类型的指针变量。
格式转换
该步骤用于将 MPSizectorS_DataFrameUndefinedStruct 类型的数据转换成 MPSizectorS_DataFrameFloat3DStruct 类型的数据,便于后续的深度值计算操作。
MPSizectorS_DataFrameFloat3DStruct float3DData = MPSizectorS_Utils::ConvertToFloat3DFrame(data);
获取图像深度
该步骤用于获取图像的深度信息,返回一个 MPSizectorS_ColorDepthRangeStruct 结构体类型的数据。
MPSizectorS_ColorDepthRangeStruct colorDepth;
MPSizectorS_Utils::GetAutoColorDepthRange_Float3D(&colorDepth, data.FrameInfo, float3DData.Data);
生成深度图像
// 创建一个与原图像等大的矩阵
cv::Mat depthImg(yPixResolution, xPixResolution, CV_8UC1);
// 修改矩阵中每个像素的值
for (int i = 0; i < yPixResolution; i++){
for (int j = 0; j < xPixResolution; j++){
MPSizectorS_DataPointFloat3DStruct float3DStruct = float3DData.Data[j + i * float3DData.FrameInfo.DataInfo.XPixResolution];
if ((float3DStruct.Mask & 0x7) == 0) {
depthImg.at<uchar>(i, j) = (float3DStruct.Z - colorDepth.Min) / (colorDepth.Max - colorDepth.Min) * 255;
}
else {
depthImg.at<uchar>(i, j) = 0;
}
}
}
该步骤中,首先遍历了 depthImg 矩阵中的每个像素,然后获取其对应的三维坐标点的深度值,通过归一化将深度值转换为灰度值,并存储到 depthImg 矩阵中。
存储深度图像
cv::imwrite("depthImg.png", depthImg);
显示深度图像
cv::namedWindow("depthImg", cv::WINDOW_NORMAL);
imshow("depthImg", depthImg);
cv::resizeWindow("depthImg", 800, 600);
cv::waitKey();
此处使用了 namedWindow() 函数创建了一个窗口并指定窗口名称,然后通过 imshow() 函数将深度图像显示在此窗口中。
结论
本应用实现了将 SizectorS 3D 相机数据转换为深度图像,并将深度图像显示和存储的功能。