c-OpenCV代码示例错误



我已经编写了以下代码示例,该示例应该创建一个外观奇特的渐变,并将其保存到用户指定的文件中:

#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编译它,一切似乎都很好。然而,在运行时(输入:"sample.png"),我得到了以下错误:

OpenCV错误:cvPtr2D中的一个参数值超出范围(索引超出范围),文件/builddir/build/build/OpenCV-2.3.1/modules/core/src/array.cpp,第1797行在引发"cv::Exception"的实例后调用了terminatewhat():/builddir/build/build/OpenCV-2.3.1/modules/core/src/array.cpp:1797:错误:函数cvPtr2D中的(-211)索引超出范围中止(堆芯转储)

有什么需要帮忙的吗?提前感谢!:)

cvGet2D和cvSet2D与opencv中的许多其他函数一样使用[行,列]约定。

有关进一步的读数:http://www.cs.iit.edu/~agam/cs512/elect notes/occv intro/

cvGet2DcvSet2D函数将行作为第一个参数,将列作为第二个参数:x和y参数的循环方式错误。因此,你正在走出图像。呼叫应为:

cvGet2D(image, y, x);

相关内容

  • 没有找到相关文章

最新更新