2014-03-19 5 views
0

다음과 같은 방법으로 OpenCV에서 DescriptorMatchers 중 하나와 함께 사용할 수있는 설명자를 OpenCV에서 만드는 방법은 무엇입니까?OpenCV에서 설명자 행렬을 만드는 방법

cv::BFMatcher matcher(cv::NORM_L2, false); 
std::vector<cv::DMatch> matches; 
matcher.match(descriptors_1, descriptors_2, matches); 

이미 다음 설명자 클래스가 있습니다. DescriptorMatcher와 함께 사용할 수있는 새로운 행렬을 변환하거나 생성하려면 어떻게해야합니까? 가급적 BFMatcher.

class Descriptor 
{ 
    public: 
    float lxi, lyi; // Location of descriptor 
    vector<double> feature; 

    Descriptor() 
    { 
    } 

    Descriptor(float x, float y, vector<double> const& f) 
    { 
     lxi = x; 
     lyi = y; 
     feature = f; 
    } 
}; 
+0

opencv의 설명자는 1d float (SIFT/SURF) 또는 uchar (ORB; BRIEF 등)입니다. 그래서 Descriptor 클래스 나 벡터 모두는 작동하지 않습니다. – berak

+0

Descriptor 클래스를 삭제할 수 있습니다. 내 코드를 통해 새로운 설명자 행렬을 만들 수있는 방법이 있습니까? 매트릭스의 구조 나 형태에 관한 정보를 찾을 수 없었습니다. –

+0

어떻게 (사용자 정의?) 설명자를 어떻게 만들지는 모르겠지만 그냥 벡터와 마찬가지로 Mat 및 push_back() 값을 만들 수 있습니다. – berak

답변

0

같은 질문에 대한 답을 찾을 때 여기를 방문하십시오. 하지만 곧 답변이 너무 간단하다는 것을 알았습니다. 필요한 건 매트를 만드는 것뿐입니다.

예를 들어, 다음은 SIFT-LIKE 디스크립터 중 일부입니다.

cv::Mat descriptors_1(nQueries, dimemsion, CV_32F,(void*)pQueries); 
cv::Mat descriptors_2(m_nDataSets, dimemsion, CV_32F,(void*)m_pData); 

cv::FlannBasedMatcher matcher; 
std::vector<cv::DMatch> matches; 
matcher.match(descriptors_1, descriptors_2, matches);