保存
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; }
}
这段代码涉及到了图像处理中的Mat对象操作,以及数据的保存和加载。它将Mat对象转换为字节数组并写入文件,然后从文件中读取数据恢复Mat对象。这个过程对于图像处理和计算机视觉应用中的数据持久化至关重要。
5386

被折叠的 条评论
为什么被折叠?



