2017-08-28 4 views
0

OpenCVのドキュメントによると、cvLoadImageはIplImageへのポインタを返す必要がありますが、intを返すようです。cvLoadImageがintを返していますか?

私は、以下のプログラムを実行すると、私は上記のコードを実行するとプログラム

#include "highgui.h" 
#include <stdio.h> 

int main(int argc, char** argv) 
{ 
    IplImage *img = cvLoadImage ("/path/to/file/face.jpg"); 
    if(img != NULL) 
      printf("%d", img->width); 
} 

の下に示されているいくつかの警告はまた、私はセグメンテーションフォールトを取得しています取得、私はIMGので、推測していますが、そのようにint型であります私はIMG->幅にアクセスしようとしているクラッシュを引き起こし、コード上の警告が

/usr/local/Cellar/opencv/3.3.0_3/include/opencv2/core/types_c.h:929:13: warning: 
     implicit declaration of function 'cvRound' is invalid in C99 
     [-Wimplicit-function-declaration] 
    ipt.x = cvRound(point.x); 
      ^
    main.c:7:21: warning: implicit declaration of function 'cvLoadImage' is invalid 
      in C99 [-Wimplicit-function-declaration] 
     IplImage *img = cvLoadImage ("/path/to/file/face.jpg"); 
         ^
    main.c:7:15: warning: incompatible integer to pointer conversion initializing 
      'IplImage *' (aka 'struct _IplImage *') with an expression of type 'int' 
      [-Wint-conversion] 
     IplImage *img = cvLoadImage ("/path/to/file/face.jpg"); 

警告が int型から、互換性のないconverstionを言うコンパイルされているので、私はintにIplImageへの変更があり、それがうまく働いたと私tは私はそれを把握するために眠れない行きました上記のプログラム

implicit declaration of function 'cvRound' is invalid in C99 
     [-Wimplicit-function-declaration] 
    ipt.x = cvRound(point.x); 
      ^
main.c:7:15: warning: implicit declaration of function 'cvLoadImage' is invalid 
     in C99 [-Wimplicit-function-declaration] 
    int img = cvLoadImage ("/path/to/file/face.jpg"); 

については、以下の警告を取得IMG

#include "highgui.h" 
#include <stdio.h> 

int main(int argc, char** argv) 
{ 
    printf("%s\n","hello world"); 
    int img = cvLoadImage ("/path/to/file/face.jpg"); 
    printf("%d", img); 
} 

のためのいくつかの負の整数値をourputs、Googleは助けることができなかった、とは何かでありますOpenCVのバージョン、またはCのバージョン?OpenCv2 3.3.0を使用しています。必要な情報があればお気軽に

+0

ヘッダーファイル(関数の前方宣言)がありません。 –

+0

@Sourav Ghosh、かもしれないが、どちらかが分からないかもしれない –

+0

あなたは 'cv.h'を追加しようとしましたか? –

答えて

0

gccの代わりにg ++でコンパイルすると、最初のコードに問題はありません。

暗黙的にIplImage*からintに変換されている2番目のコードは間違っていて実行されません。

cvRound()に関する警告とエラーは、しばらく更新されていないOpenCV C APIと関係があり、将来のバージョンでは削除される可能性が非常に高いです。新しいOpenCV機能のほとんどは、C++ APIにのみ存在します。将来的には

https://github.com/opencv/opencv/issues/6076

https://github.com/opencv/opencv/issues/8438

https://github.com/opencv/opencv/issues/8658

は、可能な限り最高の結果を得るためにOpenCVのC++ APIを使用しよう:C APIのcvRound()機能に関するエラーを記載している

他の記事。

関連する問題