独立于其大小访问cv :: Mat

时间:2014-07-31 07:54:48

标签: c++ opencv mat

我需要访问cv::Mat,但我不必知道矩阵的sizeof,那么有没有办法访问cv::Mat的所有元素大小?我的意思是没有切换矩阵的类型。

所以这就是我所拥有的:

int image_type = image.type();
switch (image_type)
{
case CV_32F :
    return image.at<float>(i,j);
case CV_8U :
    return (float)image.at<uchar>(i,j);
.
.
.
default:
    std::string msg = "Exception : cannot access IMAGE of type : " + image_type;
    throw std::exception(msg.c_str());
    break;
}

我正在做的是访问矩阵的数据,然后将其转换为浮点数(因为我使用最大32F的矩阵),这段代码工作正常,但我正在寻找这样的东西: float x = image.at(i,j);但这适用于矩阵8U和其他......

谢谢!

2 个答案:

答案 0 :(得分:2)

这可以满足您的要求,但显然您只需要拨打convertTo()一次,而不是每次访问。

Mat  dst;
image.convertTo(dst, CV_32F);
return dst.at<float>(i,j);

答案 1 :(得分:1)

您应该阅读文档:

  • Mat中元素的数量由Mat::total()

  • 给出
  • 行数,列数和渠道数分别由Mat::rowsMat::colsMat::channels()给出。

  • 矩阵持有的数据类型位于type()

......等等。

阅读文档,并查看有关如何访问矩阵元素的this tutorial除非您使用C ++ 11 type deduction 或等效的内容)。

编辑:

如果没有在某处放置开关语句,就无法访​​问未知类型的Mat。