1

Objective-C (クロスコンパイル) で OpenCV ライブラリを使用していますが、これは基本的に正常に動作します。

残念ながら、 find_obj.cpp にある例を使用すると、 cvExtractSURF関数に引数として渡す必要があるCvSURFParamsの奇妙な値が得られます。

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 (私のメイン ビュー コントローラー):

CvSURFParams params = cvSURFParams(500, 1);

ViewController.mmで cvSURFParams 関数を呼び出した後、params の値は次のようになります。

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

hessianThreshold 、nOctaves、..の値をViewController.mmで修正しても役に立ちません。params を cvExtractSURF 関数に渡すとすぐに、この関数surf.cpp でデバッグするときに間違った値が表示されます

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

誰でも助けてもらえますか?

前もって感謝します、

-- ステファン

4

1 に答える 1

0

OpenCV での構造の表現は、ViewController.mm での表現とは異なるようです。hessianThreshold のサイズが異なるか、配置に問題があります。確認事項:

  1. ViewController.mm に sizeof(CvSURFParams) をデバッグ コードとして出力します。これも OpenCV ライブラリから行います。ほとんどの場合、それらは同じではありません。
  2. 両方のプロジェクトで sizeof(double) を出力することもできます。それらは同じである必要があります。そうでない場合は、問題が見つかり、両方のプロジェクトで同じ sizeof(double) を使用するようにコンパイラに指示する必要があります。
  3. sizeof(double) が両方のプロジェクトで同じである場合、問題は、コンパイラが各プロジェクトで構造を異なる方法で配置していることにあるようです。繰り返しますが、これはおそらくコンパイラ設定ですが、デフォルトが必要ない場合は、特定の配置スキームを指定するために使用できる #pragma 命令が通常あります。
于 2011-07-11T17:11:54.400 に答える