Opencv 에서.xml 와.yml 읽 기 및 쓰기

4212 단어 OpenCV
OpenCV 프로그램 에 서 는 중간 결 과 를 저장 해 야 할 때'xml/.yml 파일'을 자주 사용 합 니 다.opencv 2.0 이전 에는 C 스타일 의 코드 를 사 용 했 습 니 다.그 당시 XML 파일 을 읽 고 쓸 때 함수 cvLoad()와 cvsave()를 각각 사 용 했 습 니 다.2.0 이후 OpenCV 는 C++를 지원 하 는 것 으로 바 뀌 었 고 이 조 치 는 코드 양 과 프로 그래 밍 할 때 고려 해 야 할 세부 사항 을 크게 줄 였 다.
        OpenCV C++   ,imwrite() imread()        ,        。           XML/YML   ,   C    cvSave()     C++      ,     FileStorage 。        ,            ,                       。

1. FileStorage  XML/YML  

     •       FileStorage  , FileStorage::WRITE         。

     •      <<           。

     •        ,       。

        :
    FileStorage fs("test.yml", FileStorage::WRITE);
    fs << "frameCount" << 5;
    time_t rawtime; time(&rawtime);
    fs << "calibrationDate" << asctime(localtime(&rawtime));
    Mat cameraMatrix = (Mat_<double>(3,3) << 1000, 0, 320, 0, 1000, 240, 0, 0, 1); //   Mat     
    Mat distCoeffs = (Mat_<double>(5,1) << 0.1, 0.01, -0.001, 0, 0);
    fs << "cameraMatrix" << cameraMatrix << "distCoeffs" << distCoeffs;

    //features      3   ,          x,y    8 uchar    
    fs << "features" << "[";
    for( int i = 0; i < 3; i++ )
    {
        int x = rand() % 640;
        int y = rand() % 480;
        uchar lbp = rand() % 256;
        fs << "{:" << "x" << x << "y" << y << "lbp" << "[:";
        for( int j = 0; j < 8; j++ )
            fs << ((lbp >> j) & 1);
        fs << "]" << "}";
    }
    fs << "]";
    fs.release(); 
  • FileStorage 클래스 읽 기 XML/YML 파일 FileStorage 는 저장 내용 을 메모리 에 계층 적 인 노드 로 구성 하고 각 노드 유형 은 FileNode 이 며 FileNode 는 하나의 수치,배열 또는 일련의 FileNode 를 집합 할 수 있 습 니 다.FileNode 는 용기 라 고 볼 수 있 습 니 다.iterator 인 터 페 이 스 를 사용 하면 이 노드 의 더 작은 단위 의 내용 에 접근 할 수 있 습 니 다.예 를 들 어 위 에 저 장 된 파일 에 접근 하 는'features'의 내용 입 니 다.절 차 는 파일 을 쓰 는 것 과 유사 하 다.
     •     FileStorage  , FileStorage::READ              
    
     •     FileStorage::operator []()         ,    FileNode FileNodeIterator
    
     •     FileStorage::release()       
    
         :
    

    또한 새 FileStorage 대상 을 만 든 후 READ 또는 WRITE 모드 로 파일 을 열 면 FileStorage::isOpened()로 파일 상 태 를 보고 파일 을 성공 적 으로 열 었 는 지 판단 할 수 있 습 니 다.
  • 좋은 웹페이지 즐겨찾기