繁体   English   中英

与其大小无关地访问cv :: Mat

[英]Accessing a cv::Mat independently from its size

我需要访问cv::Mat ,但是我不必知道Matrix的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和其他...

谢谢 !

这将满足您的要求,但是显然您只想一次调用convertTo() ,而不是每次访问都调用一次。

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

您应该阅读文档:

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

  • 行数,列数和通道数分别由Mat::rowsMat::colsMat::channels()

  • 矩阵保存的数据类型在type()

... 等等。

阅读文档,并查看有关如何访问矩阵元素的本教程除非您使用C ++ 11 类型推导或类似的方法)。

编辑:

如果不将switch语句放在某处,就无法访​​问未知类型的Mat。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM