保存
static void SaveMask(Mat mask)
{
byte[] data = new byte[mask.Width * mask.Height * mask.ElemSize() + MASK_HEADLEN];
BitConverter.GetBytes(mask.Width).CopyTo(data, 0);
BitConverter.GetBytes(mask.Height).CopyTo(data, 4);
Marshal.Copy(mask.Data, data, MASK_HEADLEN, data.Length - MASK_HEADLEN);
using (FileStream fs = new FileStream(MASK_PATH, FileMode.OpenOrCreate, FileAccess.Write))
{
fs.Write(data, 0, data.Length);
}
}
读取
static Mat LoadMask()
{
try
{
using (FileStream fs = new FileStream(MASK_PATH, FileMode.OpenOrCreate, FileAccess.Read))
{
var buffer = new byte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
int w = BitConverter.ToInt32(buffer, 0);
int h = BitConverter.ToInt32(buffer, 4);
buffer = buffer.Skip(8).ToArray();
var mat = new Mat(h, w, MatType.CV_32FC1, buffer);
Marshal.Copy(buffer, MASK_HEADLEN, mat.Data, buffer.Length - MASK_HEADLEN);
return mat;
}
}
catch { return null; }
}