c++ - 如何在 OpenCV 函数中访问多维矩阵的子矩阵?

标签 c++ opencv matrix

我有一个大小为 100x100x100 的多维矩阵 A,我想得到 A 的子矩阵,例如 A[10:20, 20:30, 30:40]。当原始矩阵有两个维度时,OpenCV 有一个 Mat 运算符来访问子矩阵,例如:A(Range(10,20), Range(20,30))

对于多维矩阵,有什么有效的方法来进行这种访问吗?我问这个是因为我需要将子矩阵复制到另一个地方。

最佳答案

答案 1

如果 mat A 是 3D 100 行 x 100 列 x 100 平面 x n channel ,您可以使用 Mat Mat::operator()(const Range* ranges) const像这样::

std::vector<Range> ranges;
ranges.push_back(Range(10,20));
ranges.push_back(Range(20,30));
ranges.push_back(Range(30,40));

Mat B = A(&ranges[0]);

B 将是 10x10x10 x n 个 channel


答案 2

但是,如果垫子 A 是 100 行 x 100 列 x 100 channel ,则它只是一个 100 channel 的 2D 垫子。你可以这样做:

Mat B = A(Range(10,20), Range(20,30));  // B will be 10x10x100

现在您需要从 B 中选择 channel 30:40,您需要使用 void mixChannels(const Mat* src, size_t nsrcs, Mat* dst, size_t ndsts, const int* fromTo, size_t npairs) :

Mat C(10, 10, CV_MAKETYPE(A.depth(), 10));
int from_to[] = { 10,0, 11,1, 12,2, 13,3, 14,4,
                  15,5, 16,6, 17,7, 18,8, 19,9};
mixChannels(&B, 1, &C, 1, fromTo, 10);

C 将根据需要为 10 行 x 10 列 x 10 channel 。这有点乱,但我不知道更好的方法。

关于c++ - 如何在 OpenCV 函数中访问多维矩阵的子矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25394397/

相关文章:

c++ - 什么类型的变量包含 lambda

c++ - 如何在图片中查找片段

尽管限制访问,Java 类变量并不是不可变的

c++ - 稠密矩阵满足条件的特征指数

python - scipy.optimize 使用 python 解决以下等式

c++ - C & C++ 中数组的动态内存分配

c++ - 是否有 GCC 预处理器指令来检查代码是否在 64 位机器上编译?

c++ - 使用 GCM(Galois 计数器模式)进行 AES 加密的 OpenSSL API

opencv - HoughLinesP在OpenCV中的线条略有变形

python-3.x - 如何在Python中使用线程调用HTTP API