C++ 独立于cv::Mat的大小访问它

C++ 独立于cv::Mat的大小访问它,c++,opencv,mat,C++,Opencv,Mat,我需要访问cv::Mat,但我不必知道矩阵的大小,所以有没有方法访问所有大小的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); . . . defa

我需要访问cv::Mat,但我不必知道矩阵的大小,所以有没有方法访问所有大小的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.ati,j;但这对matrix 8U和其他产品有效


谢谢

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

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

您应该阅读以下文档:

Mat中的元素数由Mat::total给出

行数、列数和通道数分别由Mat::rows、Mat::cols和Mat::channels给出

矩阵保存的数据类型为类型

。。。等等

阅读文档,了解如何访问矩阵元素,除非您使用C++11或其他等效工具

编辑:


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

矩阵有Mat.rows和Mat.cols。但我想你指的是元素类型?你可以用mat.type或.depth和.channels解释元素类型。我想我的问题不清楚,我知道我可以用.at代表8c,.at代表32F访问矩阵元素。。。但我需要的是一种不用切换矩阵类型的方法。也许如果你发布一些代码来显示你当前正在做的事情……你可以。在开始时将你的矩阵转换为浮点矩阵。这是一个很好的答案!我想我的问题不太清楚,我知道我可以用.at代表8c,.at代表32F来访问矩阵的元素。。。但我需要的是一种不用切换矩阵类型的方法;看看那个教程。