OpenCV:分配给类型为 int16_t 的 Mat 会给出所有零



我有以下代码:

string filename = "frame_00003_depth.bin";
int16_t* depth_img = loadDepthImageCompressed(filename.c_str());
Mat depth_img_meters = Mat(480, 640, CV_16UC1);

for(int row = 0; row < 480; row++){
    for(int col = 0; col < 640; col++){
        depth_img_meters.at<int16_t>(row, col) = depth_img[(640*row + col)]  * 0.001;

        cout << depth_img_meters.at<int16_t>(row,col)<< "meters" <<  endl;  
    }
}

我已经检查了数组int16_t* depth_img中的值是否大于 100,但是当分配给此处的Mat时,它会打印所有零

对我来说

看起来像一个截断问题。

您将 depth_img 中的值乘以 0.001,这意味着数字在赋值过程中被转换为浮点数,然后又转换回int16_t。这意味着depth_img中任何小于 1000 的值都将在 depth_img_meters 中截断为零

任何时候处理不同的数据类型时,都必须注意与赋值期间的这种隐式转换相关的错误。

相关内容

  • 没有找到相关文章

最新更新