通过OpenCvSharp,将16位图转8位图,代码如:
cs
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位图的最小值