2014-06-12 2 views
1

FileStorage를 사용하여 키포인트 (벡터), 설명자 (매트) 및 기타 사항을 yml 파일에 성공적으로 쓸 수있었습니다. 그러나 이미지 쌍 사이의 일치를 계산 한 후에는 일치 항목을 파일에 쓸 수 없습니다.<Dmatch>을 FileStorage에 작성하는 방법

DMatch가 distance, trainIdx 등의 필드가있는 구조체 인 것 같지만 파일에이 방법을 쓰는 사람이 있습니까?

아니면 거리 벡터, trainIdx 벡터 등을 작성해야합니까?

std::vector<cv::DMatch> matches; 
for(int i=0;i<numims-1;i++){  
    for(int j=i+1;j<min(i+10,numims);j++){ 
     matches = MatchImagePair(i,j); 
     //write the matches 
     std::string matchfile = matchpath + "matchesij.yml"; 
     cv::FileStorage fs(matchfile, cv::FileStorage::WRITE); 
     write(fs, "matches", matches); 
     fs.release(); 
    } 
} 

matchesij는 i와 j의 번호를 포함해야하지만 간결하게 편집 : 몇 가지 코드를 보여

편집. 당신은 파일 저장을 위해 >> 연산자를 오버로드 할 수

std::vector<cv::DMatch> Matches::MatchImagePair(int idx1, int idx2){ 
    //matcher type 
    cv::BFMatcher matcher(cv::NORM_L2); 

    //given descrs1 and descrs2, match the 2 descriptors 
    matcher.knnMatch(descrs1, descrs2, matches12, 2); 
    matcher.knnMatch(descrs2, descrs1, matches21, 2); 

    //various tests, returns vector<DMatch> given keypts1, keypts2 (for RANSAC) 
    matches = DoVariousTests(matches12, matches21, keypts1, keypts2); 

    return matches; 
} 

답변

2

:

또한, MatchImagePair이 같이 보입니다. here에서 이력서 :: TermCriteria에 대한

동작하는 예제 코드 :

void operator>>(const cv::FileNode &node, 
     cv::TermCriteria &termCrit) { 
    node["type"] >> termCrit.type; 
    node["maxCount"] >> termCrit.maxCount; 
    node["epsilon"] >> termCrit.epsilon; 
} 

cv::FileStorage &operator<<(cv::FileStorage &fs, 
     const cv::TermCriteria &termCrit) { 
    fs << "{" << "type" << termCrit.type << "maxCount" 
      << termCrit.maxCount << "epsilon" << termCrit.epsilon 
      << "}"; 
    return fs; 
} 
+0

나는 오늘이 밖으로 시도하고, 나는 그것이 작동하도록 한 번 감사를 투표 할 수 있습니다! – adinutzyc21

관련 문제