2012-06-26 40 views
0

是否有一種簡單的方法可以通過使用C++ API在OpenCV中保存KNN分類器?使用Boost序列化庫序列化CvK最近的類

在將CvKNearest類包裝到另一個類中之後,我試圖保存一個描述爲here的KNN分類器。

它成功地保存到磁盤,但是當我從中讀出運行預測方法給我分段錯誤(核心轉儲)錯誤。

我的包裝類如下:

class KNNWrapper 
{ 
    CvKNearest knn; 
    bool train(Mat& traindata, Mat& trainclasses) 
    { 

    } 
    void test(Mat& testdata, Mat& testclasses) 
    { 

    } 
} 

我聽說升壓串行化庫是更強大和安全。任何人都可以指引我使用Boost庫來完成這些工作嗎?

+0

哪個操作系統? 32位,64位?哪個OpenCV版本?保存和加載OpenCV機器學習庫不成問題。你的數據是否有完整的代碼清單?這個包裝並沒有真正意義。 – bytefish

+0

我使用的是64位的Ubuntu OpenCV 2.3.1。我正在尋找保存並加載KNN分類器。我在這裏有以下代碼https://gist.github.com/3008331 – garak

回答

0

@tisch是完全正確的,我想糾正自己。 CvKNearest不會覆蓋CVStatModelloadsave功能。

但由於CvKNearest不計算模型,因此不存儲內部狀態。當然,您想存儲您已通過的培訓並測試cv::Mat數據。

如果你想提供相同的API在OpenCV的其他統計模型(這使得:您可以使用FileStorage類此,一個偉大的說明和教程在給定感覺)我想繼承CvKNearest並提供保存和加載功能,它們分別序列化訓練/測試數據並使用FileStorage對其進行反序列化。

+0

CvKNearest沒有從CvStatModel實現必要的功能。所以你的解決方案是不可能的。 – tisch