通过OpenCvSharp,将16位图转8位图,代码如:
public static Mat Convert16BitTo8Bit(Mat src16, double max, double min){if (src16.Depth() == 0){//已经是8位了return src16;}Mat dst8 = Mat.Zeros(src16.Rows, src16.Cols, MatType.CV_8UC1);if (max <= min){if (min == 255){max = 255;min = 254;}else{max = min + 1;}}double delt = 255.0 / (max - min);for (int i = 0; i < src16.Rows; i++){for (int j = 0; j < src16.Cols; j++){ushort s = src16.At<ushort>(i, j);if (s < min){dst8.At<byte>(i, j) = 0;}else{byte d = (byte)((s - min) * delt);dst8.At<byte>(i, j) = d;}}}return dst8;}
参数说明:
Mat src16,16位图
double max,16位图的最大值
double min,16位图的最小值