2013-06-25 9 views
16

「OpenCV Library with OpenCV Libraryを学ぶ」でOpenCVを学び始めました。IplImage * imgの説明

画像を表示する方法を示し最初の例では、それはライン

IplImage* img = cvLoadImage("name.type") 

を持っている本はそれを説明しますが、私はまだ完全にはIplImage* imgがまったく同じかわかりません。

cvLoadImageはIplImageが指している画像をimgにロードしますか?誰も私にこれを説明できますか?

+4

OpenCVを学び始めたばかりの方は、C++ APIの使用を強くお勧めします。 C API( 'IplImage'を含む)は非推奨です(使用するのは難しいとは言えません)。代わりにOpenCVの[チュートリアル](http://docs.opencv.org/doc/tutorials/tutorials.html)から始めたいと思うかもしれません。 – Aurelius

答えて

25
  • imgは、変数の名前であるだけでなくblahblahblahかもしれないありがとう。

  • IplImageは、画像データ自体と画像上のいくつかの情報(サイズ、色深度など)を含むstructです。 IplImage詳細は

    typedef struct _IplImage { 
    int     nSize; 
    int     ID; 
    int     nChannels; 
    int     alphaChannel; 
    int     depth; 
    char     colorModel[4]; 
    char     channelSeq[4]; 
    int     dataOrder; 
    int     origin; 
    int     align; 
    int     width; 
    int     height; 
    struct _IplROI*  roi; 
    struct _IplImage* maskROI; 
    void*    imageId; 
    struct _IplTileInfo* tileInfo; 
    int     imageSize; 
    char*    imageData; 
    int     widthStep; 
    int     BorderMode[4]; 
    int     BorderConst[4]; 
    char*    imageDataOrigin; 
    } IplImage; 
    

Other question about IplImage

  • cvLoadImageはそれをロードするとき、それはIplImageへの作成を意味し、それは定置だ返すIplImageへのポインタを提供します。

メモリリークが発生したくない場合は、終了時にcvReleaseImage(&img)を忘れないようにしてください。

+0

IplImageは変数 "img"に情報を格納するデータ構造です。もしあなたが気にしないなら、ここにいる間にいくつか質問をしたいと思います...なぜIplImageにポインタが必要ですか? 「割り当てられたイメージ・データ構造へのポインタが返される」とはどういう意味ですか?ありがとうございます – user2521723

+0

画像データがあり、そのポインタは 'IplImage * img = cvLoadImage(" name.type ")'呼び出しで作成されています。そのように宣言したのは、すべてのcv ...メソッドがイメージポインタを受け入れて返すからです。 あなたが学んでいる本は、C言語で書かれた古いopenCV APIに基づいています。現在、openCV 2.4.5の最新の安定版リリースでは、ポインタの必要がないC++ APIが使用されています。この本と並んで、opencv 2.4.5のドキュメントを見て、ここで大きなチュートリアルを簡単に学ぶことができます。 C++ APIの 'Mat image = imload(" ");'宣言にはポインタがなく、メソッドにはポインタではなくデータが必要です。 – baci