我在opencv代码中使用筛选算法从图像中获取描述符和关键点。我的代码是

    Ptr<IplImage> image;
    vector<KeyPoint> keypoints;
    OutputArray des;

    Feature2D *descriptor_type = new SIFT()
    Mat image_mat(image);
    (*descriptor_type)(image_mat,noArray(),keypoints,des,false);

在这里,我可以在 vector 中获取图像的关键点。此后,我想获取每个KeyPoint的 Octave 以获取更多详细信息。但是当我为一张图像确定每个关键点的 Octave 值时,我似乎很奇怪确认他们是否正确。
for(int i=0;i<keypoints.size();i++)
{
     cout<< (keypoints[i].octave) <<endl;
}

9765375
9765375
2621951
8323583
13763071
6488575
12845567
721407
3604991
12321279
9568767
7406079
8585727
4653567
7799295
7799295
5112319
10486271
9961983
6226431
1245951

如果我将SIFT算法更改为SURF算法,那就可以了,看起来很正确。
0
0
0
0
0
0
1
0
0
0
0
1
1
1
0
1
1
1
0
0
1
0

因此,我想问一下在opencv中SIFT算法中 Octave 值的计算是否正确?

最佳答案

刚遇到this link

似乎需要“修补” SIFT关键点的octave值:

keyPoint.octave = keyPoint.octave & 0xFF;

09-09 23:50
查看更多