【发布时间】:2012-09-04 09:11:03
【问题描述】:
据此 post 和 OpenCV 文档,我可以初始化和访问多维 Mat 的每个元素。
其实我一开始是用 MATLAB 编码的,现在需要转成 OpenCV。 MATLAB 矩阵支持子矩阵访问,例如:a(:,:,3) 或 b(:,:,3:5)
这可以在 OpenCV 中完成吗?据我所知,这可以用 2D Mat 来完成。更多的 2D 怎么样?
编辑01: 此外,对于多维 Mat,属性 cols 和 rows 不足以表征矩阵的 3 种大小。有维度大于3的情况,这些属性如何存储?
编辑02:
// create a 100x100x100 8-bit array
int sz[] = {100, 100, 100};
Mat bigCube(3, sz, CV_8U, Scalar::all(0));
我放弃了使用 OpenCV Mat 访问子矩阵的想法。也许,OpenCV 不支持它。但是从这个示例代码中,构造函数接收来自“sz”的第 3 个维度。这个第 3 维传递给 Mat 的哪个属性?可能在这种情况下,rows = 100,cols = 100,其他?? = 100 我迷失了 OPenCV 文档
Edit03:从 OpenCV 源跟踪 Mat 类 我从 mat.hpp 中找到 Edit02 中构造函数的定义:
inline Mat::Mat(int _dims, const int* _sz, int _type, const Scalar& _s)
: flags(0), dims(0), rows(0), cols(0), data(0), refcount(0),
datastart(0), dataend(0), datalimit(0), allocator(0), size(&rows)
{
create(_dims, _sz, _type);
*this = _s;
}
下一个问题是这里的“创建”函数是在哪里以及如何定义的? => 在 OpenCV 中跟踪这个 Mat 定义可能有助于我在 Mat 矩阵中修改/自定义我自己的特征
PS:如果我的帖子写的太乱了,请见谅!!我是一个新手程序员,试图解决我的编程问题。如果我的方法不够好或不够正确,请随时纠正我。谢谢!!
【问题讨论】:
-
我有 core.hpp 来查看构造函数的所有声明,包括多维 Mat 的声明。但是我找不到定义的位置,我的意思是构造函数的编码,以查看第三维的属性。源代码在哪里??
-
那会在那里:
/modules/core/src/matrix.cpp。我正在编辑我对您的原始问题的回答如下 -
你最终写了这段代码吗?我将不得不做同样的事情......
-
@ShawnLe 你能接受雷米的回答吗?