C++ 独立于cv::Mat的大小访问它
我需要访问cv::Mat,但我不必知道矩阵的大小,所以有没有方法访问所有大小的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
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来访问矩阵的元素。。。但我需要的是一种不用切换矩阵类型的方法;看看那个教程。