0

我有以下代码:

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此处时,它会打印全零

4

1 回答 1

1

对我来说似乎是一个截断问题。

您将值乘以depth_img0.001,这意味着数字将转换为浮点数,然后返回到int16_t分配过程中。这意味着任何小于 1000 in 的值depth_img都将被截断为零depth_img_meters

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

于 2012-12-17T15:19:38.727 回答