2012-06-26 2 views
0

C++ API를 사용하여 OpenCV에 KNN 분류기를 저장하는 간단한 방법이 있습니까?부스트 직렬화 라이브러리를 사용하여 CvKNearest 클래스를 직렬화

다른 클래스에 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 Machine Learning 라이브러리에서 문제가되지 않습니다. 데이터에 대한 전체 코드 목록이 있습니까? 래퍼는 실제로 의미가 없습니다. – bytefish

+0

64 비트 우분투 OpenCV 2.3.1을 사용하고 있습니다. KNN 분류자를 저장하고로드하려고합니다. 여기에 다음 코드가 있습니다 https://gist.github.com/3008331 – garak

답변

0

@tisch는 완전히 옳고 나 자신을 바로 잡고 싶습니다. CvKNearestCVStatModelloadsave 기능을 덮어 쓰지 않습니다.

그러나 CvKNearest은 모델을 계산하지 않으므로 저장할 내부 상태가 없습니다. 물론, 당신은 훈련을 저장하고 당신이 통과 한 데이터를 cv::Mat 시험하고 싶습니다. 당신이 (OpenCV의의 다른 통계 모델에서와 동일한 API를 제공하려면

어떤이 있습니다 : 당신은이에 대한 FileStorage 클래스를 사용할 수 있습니다, 좋은 설명 및 튜토리얼에 제공됩니다 감각) 나는 CvKNearest을 서브 클래스하고 각각 훈련/테스트 데이터를 serialize하고 FileStorage을 사용하여 deserialize하는 저장 및로드 기능을 제공한다고 가정합니다.

+0

CvKNearest는 CvStatModel에서 필요한 기능을 구현하지 않습니다. 그래서 당신의 해결책은 불가능합니다. – tisch

관련 문제