1

opencv ライブラリを使用できないプロジェクトを行っています。だから私はソースコードを見て、必要に応じてそれらのいくつかを変更して使用しようとしていました.

しかし、cvCreateData(..) 関数に問題がありました。関数内に入ると、「CvIPL.allocateData」の構造「CvIPL」が使用されますが、右クリックして定義に移動しようとすると、いいえと表示されます定義が見つかりました。

私は「CvIPL」でグーグルし、「array.cpp」で見つけました。これは次のように述べています-

static struct
{
    Cv_iplCreateImageHeader  createHeader;
    Cv_iplAllocateImageData  allocateData;
    Cv_iplDeallocate  deallocate;
    Cv_iplCreateROI  createROI;
    Cv_iplCloneImage  cloneImage;
}
CvIPL;

問題は、Cv_iplCreateImageHeader、Cv_iplAllocateImageData... が何であるかわからず、それらを右クリックしても定義が見つからないことです。

Cv_iplCreateImageHeader、Cv_iplAllocateImageData のタイプを教えてください... または tehm の定義をどこで見つけることができますか?

4

1 に答える 1

1

それでもこれが必要な場合は、次の答えがあります。

私はMSVisualStudio 2005を使用しています。右クリックして記号情報を探すと、問題なく動作します。しかし、疑わしい場合(そして私はしばしば:)、grepを使用してください!cygwinを使用して、実行しました

cd ~/opencv
find . | xargs grep -l Cv_iplCreateImageHeader

リストされているファイルの1つは./modules/core/include/opencv2/core/core_c.h、で、次の行が含まれています

typedef IplImage* (CV_STDCALL* Cv_iplCreateImageHeader)
                            (int,int,int,char*,char*,int,int,int,int,int,
                            IplROI*,IplImage*,void*,IplTileInfo*);
typedef void (CV_STDCALL* Cv_iplAllocateImageData)(IplImage*,int,int);
typedef void (CV_STDCALL* Cv_iplDeallocate)(IplImage*,int);
typedef IplROI* (CV_STDCALL* Cv_iplCreateROI)(int,int,int,int,int);
typedef IplImage* (CV_STDCALL* Cv_iplCloneImage)(const IplImage*);

つまり、基本的にCvIPLは抽象仮想クラスでcreateHeaderあり、他のメンバーは型Cv_iplCreateImageHeaderなどを持つ仮想関数です。これはC ++と同じですが、Cで記述されています。

于 2013-02-15T17:28:07.113 に答える