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

Accessing a cv::Mat independently from its size

本文关键字:cv Mat 访问 独立      更新时间:2023-10-16

我需要访问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 max一起工作),这段代码工作正常,但我正在寻找这样的东西: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。