错误。表达式必须具有类类型

时间:2014-04-07 14:24:02

标签: c++ pointers opencv

我正在尝试将Mat传递给函数,但是当我尝试获取图像的float数据时,我遇到了一些错误。有人可以告诉我什么是错的吗?

int _tmain(int argc, _TCHAR* argv[])
{
    cv::Mat img;//gradients from fingerprint image
    cv::Mat dst;
    bh2Rad(&img,&dst);
}

void bh2Rad(Mat* srcMat,cv::Mat* dstMat)
{
    for (int i=0; i < srcMat->rows ;i++)
    {
        float* srcP = srcMat->data.fl + srcMat->width * i;// srcMat Error.
        float* dstP = dstMat->data.fl + dstMat->width * i;//dstMat Error

        for (int j = 0; j < srcMat->cols ;j++)
            dstP[j] = srcP[j] * BH_DEG_TO_RAD;
    }
}

2 个答案:

答案 0 :(得分:1)

你似乎把旧的(c-api)CvMat与cv :: Mat混淆了像素操作。

此外,灰度图像是uchar,而不是浮点数,并且您无法以任意格式访问其像素(除非您之前使用convertTo()float)。

int main(int argc, char* argv[])
{

  cv::Mat img = cv::imread("original.bmp", CV_LOAD_IMAGE_GRAYSCALE);
  cv::Mat dst;

  bh2Rad(img,dst);

}

//
// please use references with cv::Mat, not pointers.
// those things are refcounted, you're thrashing that with passing pointers.
//
void bh2Rad(const cv::Mat & srcMat, cv::Mat & dstMat)
{
  dstMat.create(srcMat.size(),srcMat.type());
  for (int i=0; i < srcMat.rows ;i++)
  {
    const uchar* srcP = srcMat.ptr<uchar>(i);
    uchar* dstP = dstMat.ptr<uchar>(i);

    for (int j = 0; j < srcMat.cols ;j++)
        dstP[j] = srcP[j] * BH_DEG_TO_RAD;
  }
}

答案 1 :(得分:1)

该错误标记了您没有使用命名空间CV限定Mat的唯一实例。我假设您没有命名空间CV的using指令,因此仅在CV中声明的类型Mat是未知的且无法识别。

void bh2Rad(cv::Mat* srcMat, cv::Mat* dstMat)

(请在开盘前直接注意 cv :: 。)