我在 opencv 代码中使用 sift 算法从图像中获取描述符和关键点。我的代码是
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);
在这里,我可以在矢量 < KeyPoint > 中获取图像的关键点。之后,我想获取每个关键点的八度音以获取更多详细信息。但是当我为一张图像计算每个关键点八度音值时,我想要的似乎很奇怪来确认他们是否正确。
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
所以想问下SIFT算法中Octave值的计算在opencv中是否正确?