独立于cv::Mat的大小访问cv::Mat
Accessing a cv::Mat independently from its size
我需要访问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::rows
、Mat::cols
和Mat::channels()
给出。矩阵保存的数据类型在
type()
…等等......
阅读文档,看看这个关于如何访问矩阵元素的教程(除非你使用c++ 11类型演绎或类似的东西)。
编辑:如果不使用switch语句,就无法访问未知类型的Mat。
相关文章:
- 将CHW格式的浮点向量转换为cv::Mat
- C++:从GPU内存(cudaMemcpy2D)获取BGR图像(cv::Mat)
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 将 cv::mat 转换为 QImage
- 将 cv::Mat 转换为 std::vector 的通用函数
- 在 QML VideoOutput 中将 cv::mat 显示为 QVideoFrame
- 如何将 cv::Mat 转换为 vtkImageData?
- 如何将 vtkImageData 转换为 cv::Mat?
- 如何总结所有cv::Mat元素
- Qt-工作线程崩溃时将cv::Mat转换为QImage
- 在 cv::Mat 中生成 2D 坐标网格
- 将 cv::Mat 转换为无符号的 int 像素
- OpenCV 分段错误(核心转储)在使用 cv::Mat::at 时
- 如何将多个 cv::Mat 从 c++ dll 传递到 opencvsharp Mat c#?
- 如何在不复制数据的情况下将 cv::Mat 转换为 2d 标准::矢量
- 如何使用 (*mpORBextractorLeft)(im,cv::Mat(),mvKeys,mDescriptors)
- 从数组创建 Mat 时,'cv::Mat' 和 'int' 类型不兼容
- 如何将 cv::mat 对象从 python 模块传递到 c++ 函数并返回返回的 cv::mat 类型为对象?
- 移动语义和 cv::Mat
- OpenCV 错误:断言在 cv::Mat 行 522 中失败