C# 和OpenCvSharp将16位Raw灰度图转为16位png
在此之前查找过只用C#进行转换,但是C# 中的16bpp支持不好,查找很多资料没有稳定的效果,因此采用OpenCvSharp的方式
首先将读出的raw16的 byte[] 转为 Int16,因为byte是8位的,相邻两组的byte组成一个16位像素数据
再创建一个 MatType.CV_16UC1 的Mat 将灰度数据通过循环写入
Mat srcImage = new Mat(5120, 5120, MatType.CV_16UC1);
byte[] data = File.ReadAllBytes("E:\\Desktop\\rrr.raw");
int length = data.Length;
Int16[] imag16 = new Int16[length / 2];
for (int i = 0; i < length; i = i + 2)
{
Int16 temp = (short)(data[i + 1] * 256 + data[i]);
imag16[i / 2] = temp;
}
int k = 0;
for (int m = 0; m < 5120; m++)
{
for (int n = 0; n < 5120; n++)
{
srcImage.At<Int16>(m, n) = imag16[k];
k++;
}
}
bool flag = Cv2.ImWrite("E:\\Desktop\\123.png", srcImage);
//保存位bmp时,会自动存为8为的bmp
MessageBox.Show("ok");