0

我做了一个函数来创建一个阈值图像。输入在img,输出在out。这是我的代码:

void *tresholdImage (CvMat *img, CvMat *out) {
    for (int i = 0; i < img->rows; i++)
        {
        for (int j = 0; j < img->cols; j++)
            {
            double x;
            if (cvGetReal2D(img, i, j) < 128) x = 0; else x = 255;
            cvSetReal2D(out, i, j, x);
            }
        }
    }

调用此函数时,in 中的图像out应与 in 中的图像大小相同img。我想自动将out's 的大小设置为img's. 我在第一个之前添加了这个for

out = cvCreateMat(img->rows, img->cols, img->type);

但它不起作用;编译器在CvGetMat. 但是如果我把它放在主函数中,它就可以工作。任何人都可以帮助我吗?

4

1 回答 1

0

如果要在此调用期间创建结果图像,则需要以下内容:

CvMat * thresholdImage (CvMat *img) {
  CvMat *out = cvCreateMat(img->rows, img->cols, img->type);
  for (int i = 0; i < img->rows; i++)
    for (int j = 0; j < img->cols; j++) {
      double x;
      if (cvGetReal2D(img, i, j) < 128) x = 0; else x = 255;
      cvSetReal2D(out, i, j, x);
    }
  return out;
}

然后您将其用作:

CvMat *out = thresholdImage(img);
于 2013-09-25T19:32:33.190 回答