gpt4 book ai didi

c++ - iPhone : Wrong values when creating struct 的 OpenCV/SURF 跟踪

转载 作者:太空宇宙 更新时间:2023-11-04 14:22:09 25 4
gpt4 key购买 nike

我在 Objective-C(交叉编译)中使用 OpenCV 库,它基本上工作正常。

不幸的是,当使用可以在 find_obj.cpp 中找到的示例时,我得到了必须作为参数传递给 CvSURFParams 的奇怪值em>cvExtractSURF 函数。

features2d.hpp(openCV 的一部分):

typedef struct CvSURFParams
{
int extended;
double hessianThreshold;

int nOctaves;
int nOctaveLayers;

} CvSURFParams;

surf.cpp(openCV 的一部分):

CvSURFParams cvSURFParams(double threshold, int extended)
{
CvSURFParams params;
params.hessianThreshold = threshold;
params.extended = extended;
params.upright = 0;
params.nOctaves = 4;
params.nOctaveLayers = 2;
return params;
}

ViewController.mm(我的主视图 Controller ):

CvSURFParams params = cvSURFParams(500, 1);

调用ViewController.mm中的cvSURFParams函数后,params的值为:

extended         = (int)    1
hessianThreshold = (double) 0
nOctaves = (int) 1082081280
nOctaveLayers = (int) 4

ViewController.mm 中更正 hessianThresholdnOctaves 的值无济于事,我一通过 params 到我的 cvExtractSURF 函数,在 surf.cpp 中调试此函数时出现错误值:

extended         = (int)    1
upright = (int) 0
hessianThreshold = (double) 500
nOctaves = (int) 4
nOctaveLayers = (int) 0

有人可以帮忙吗?

提前致谢

-- 斯蒂芬

最佳答案

听起来 OpenCV 中的结构表示与 ViewController.mm 中的结构表示不同。要么 hessianThreshold 大小不同,要么存在对齐问题。要检查的一些事项:

  1. 在您的 ViewController.mm 中输出 sizeof(CvSURFParams) 作为一些调试代码。也可以从 OpenCV 库执行此操作。他们很可能不一样。
  2. 您还可以在两个项目中输出 sizeof(double)。它们应该相同,否则您会发现问题所在,您需要指示编译器在两个项目中使用相同的 sizeof(double)。
  3. 如果两个项目中的 sizeof(double) 相同,那么问题似乎是编译器在每个项目中以不同方式对齐结构。同样,这很可能是编译器设置,但通常有 #pragma 指令可用于指定特定的对齐方案(如果您不想要默认值)。

关于c++ - iPhone : Wrong values when creating struct 的 OpenCV/SURF 跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6653557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com