我需要访问一个 cv::Mat, ,但我不必知道 sizeof 矩阵,那么有没有办法访问 a 的元素 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 的矩阵),此代码工作正常,但我正在寻找类似这样的东西:浮点数 x = image.at(i,j);但这适用于矩阵 8U 和其他...

谢谢 !

有帮助吗?

解决方案

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

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

其他提示

您应该阅读文档:

  • Mat 中的元素数量由下式给出 Mat::total()

  • 行、列和通道的数量由下式给出 Mat::rows, Mat::colsMat::channels(), , 分别。

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

...等等。

阅读文档并查看 本教程 关于如何访问矩阵元素(除非你使用C++11 类型推导 或同等的东西)。

编辑:

如果不放置一个,就无法访​​问未知类型的 Mat 转变 某处声明。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top