我有以下代码:
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
时会打印全部为零
答案 0 :(得分:1)
对我来说看起来像截断问题。
您将depth_img
中的值乘以0.001,这意味着数字将转换为浮点数,然后在分配过程中返回int16_t
。这意味着depth_img
中depth_img_meters
中小于1000的任何值都将被截断为零{/ 1}}
每当您处理不同的数据类型时,您必须注意在分配期间与此类隐式转换相关的错误。