c++ - SIFT 算法中的奇怪 Octave 值?

标签 c++ opencv image-processing computer-vision sift

我在 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);

这里我可以在 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

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

最佳答案

刚刚遇到this link .

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

keyPoint.octave = keyPoint.octave & 0xFF;

关于c++ - SIFT 算法中的奇怪 Octave 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16186361/

相关文章:

c++ - 哪些 C/C++ 函数最常被错误使用并可能导致缓冲区溢出?

C++ 派生类无法正常运行

OpenCV - 在 fitEllipse() 的轮廓内拟合叶子

c++ - 我需要透明色之类的白色

python - 如何修复 HoughCircles 函数的错误?

c++ - 这些片段中的每一个在编译器行为上有什么不同吗?

c++ - SFML C++ Canny 边缘检测双边缘

opengl - 纹理会影响对象的颜色

Android OCR 库

java - 使用 Java 和 AsyncScalr 缩放大图像