我需要访问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的矩阵),这段代码工作正常,但我正在寻找这样的东西: float x = image.at(i,j);但这适用于矩阵8U和其他......
谢谢!
答案 0 :(得分:2)
这可以满足您的要求,但显然您只需要拨打convertTo()
一次,而不是每次访问。
Mat dst;
image.convertTo(dst, CV_32F);
return dst.at<float>(i,j);
答案 1 :(得分:1)
您应该阅读文档:
Mat中元素的数量由Mat::total()
行数,列数和渠道数分别由Mat::rows
,Mat::cols
和Mat::channels()
给出。
矩阵持有的数据类型位于type()
......等等。
阅读文档,并查看有关如何访问矩阵元素的this tutorial(除非您使用C ++ 11 type deduction 或等效的内容)。
编辑:
如果没有在某处放置开关语句,就无法访问未知类型的Mat。