0

独特のグラデーションを作成し、ユーザーが指定したファイルに保存することになっている次のコードサンプルを作成しました。

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

static IplImage *image = 0;

void main() {
   char path[1024];
   int x, y;
   CvScalar scalar;

   scanf("%s", path);
   image = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);

   for (y = 0; y < 480; y++) {
      for (x = 0; x < 640; x++) {
         scalar = cvGet2D(image, x, y);
         scalar.val[0]=(unsigned char)(x + y);
         cvSet2D(image, x, y, scalar);
      }
   }

   cvSaveImage(path, image, 0);
}

私はそれを使用してコンパイルします:gcc opencv.c -o opencv `pkg-config --libs --cflags opencv` -lmそしてすべてがOKのようです。ただし、実行時(入力: "sample.png")に、次のエラーが発生します。

OpenCVエラー:cvPtr2D、ファイル/builddir/build/BUILD/OpenCV-2.3.1/modules/core/src/array.cpp、1797行で引数の値の1つが範囲外です(インデックスが範囲外です)
'cv::Exception'のインスタンスをスローした後に呼び出された終了
  what():/builddir/build/BUILD/OpenCV-2.3.1/modules/core/src/array.cpp:1797:エラー:(-211)インデックスが関数cvPtr2Dの範囲外です

中止(コアダンプ)

何か助けてください?前もって感謝します!:)

4

2 に答える 2

4

cvGet2DおよびcvSet2Dは、opencvの他の多くの関数と同様に[row、column]規則を使用します。

詳細については、 http ://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/をご覧ください。

于 2013-02-03T22:12:29.260 に答える
1

cvGet2Dand関数はcvSet2D、行を最初の引数として、列を2番目の引数として取ります。x引数とy引数が間違った方向にあります。したがって、あなたはイメージの外に出ています。呼び出しは次のようになります。

cvGet2D(image, y, x);
于 2013-02-03T22:12:33.177 に答える