2013年2月15日 星期五

[EmguCV] 保存(Save)與載入(Load) Histogram

前言

最近因為需求的關係,需要把直方圖相關資訊儲存成檔案,在OpenCV時有一些函式方法可以解決(Ex:CvOpenFileStorage、cvWrite...),但是EmguCV卻不好找 ,而且OpenCV相關個涵式在CvInvoke中也不齊全(Ex:cvWrite不存在),想使用C#的XmlSerializer,也會發現EmguCV的值方圖類別DenseHistogram不支援,好在後發現了一篇討論文解決了我的疑惑, 於是趕緊記錄下來!

解決方式

使用BinaryFormatter二位元序列的方式把整個資料Save至檔案或Load到DenseHistogram
  • Save存入檔案
  •   
    public static void HistogramSave(DenseHistogram _histogram, string _filaname)
    {
     System.IO.Stream stream;
     BinaryFormatter bformatter;
     // Open the saved histogram
     try
     {
      // serialize histogram
      stream = File.Open(_filaname, FileMode.Create);
      bformatter = new BinaryFormatter();
      bformatter.Serialize(stream, _histogram);
      stream.Close();
     }
     catch (Exception exp)
     {
      MessageBox.Show(exp.ToString());
     }
    }
       
  • Load至DenseHistogram
  • public static DenseHistogram HistogramLoad(string _filaname)
    {
     System.IO.Stream stream;
     BinaryFormatter bformatter;
     DenseHistogram histLoaded;
     // Open the saved histogram
     try
     {
      if (File.Exists(_filaname))
      {
       stream = File.Open(_filaname, FileMode.Open);
       bformatter = new BinaryFormatter();
       histLoaded = (DenseHistogram)bformatter.Deserialize(stream);
       stream.Close();
       return histLoaded;
      }
     }
     catch (Exception exp)
     {
      MessageBox.Show(exp.ToString());
     }
     return null;
    }
      

    參考資料

  • Save histogram
  • 沒有留言:

    張貼留言