Kinect的深度图像和红外图像都是16位深度,利用Matlab标定时,用了一款老版本的Matlab标定箱,该工具箱能够实现单目的某一场景下的外参计算,进而可以利用两个相机与标定板的外参,来计算两个相机之间的相对位姿。但是老版本有一个问题,16位的TIF图像读进去一片白,根本没法实现标定。所以需要转成8位的来进行标定
1.代码方法
主要是利用高位截断的思想,取16位数据的高八位,作为8位图像的数值。但是效果有点不理想,图像转换成8位后成雪花状:
Mat photoGrid::converTIF16to8(Mat input)
{
Mat result = Mat::zeros(input.rows, input.cols, CV_8UC1);
for (int i = 0; i < input.rows; i++)
{
for (int j = 0; j < input.cols; j++)
{
int value = input.at<ushort>(i, j);
result.at<uchar>(i, j) = value; //16位数据截断,只留高8位
}
}
return result;
}
二、借助ps转化图像格式
将图像丢入PS中,如图:
【图像】→【模式】→【8位通道】,图像效果较好。