c++ - 从 OpenCV 中的 Matrix 访问值

标签 c++ matlab opencv matrix pixel

例如,我有一个大小为 10x10 的矩阵 M 和一个长度为 5 的列矩阵 ind
我如何使用 OpenCV 在 C++ 中将 A(ind,:) 分配给新矩阵 B?

下面是我在 Matlab 中的做法:

A = [ 41     8    33    36    22    14    38    43    18     4
    46    49     2     2    20    34    13    13    42     3
     7    48    43    14    39    33    26    41    30    27
    46    25    47     3    40     9    35    13    28    39
    32    41    34     5    10     6    45    47    46    47
     5     8    38    42    25    25    48    18    15     7
    14    22    38    35    23    48    28    10    38    29
    28    46    20    16    33    18     7    13    38    24
    48    40    33    48    36    30     8    31    20     1
    49    48     9     2    38    12    13    24    29    17]

ind = [2; 8; 4; 6; 2]  

B = A(ind, :);

B = [ 46    49     2     2    20    34    13    13    42     3
    28    46    20    16    33    18     7    13    38    24
    46    25    47     3    40     9    35    13    28    39
     5     8    38    42    25    25    48    18    15     7
    46    49     2     2    20    34    13    13    42     3]

谁能告诉我如何在不使用 for 循环的情况下使用 OpenCV 在 C++ 中执行此操作

最佳答案

没有以某种方式迭代的直接方法来提取行/列的随机排序。最简单的方法是提取行,然后将它们逐行插入目标矩阵。假设您已声明矩阵 A 及其数据集:

cv::Mat B;
B.push_back(A(cv::Range(2,3),cv::Range::all()));
B.push_back(A(cv::Range(8,9),cv::Range::all()));
B.push_back(A(cv::Range(4,5),cv::Range::all()));
B.push_back(A(cv::Range(6,7),cv::Range::all()));
B.push_back(A(cv::Range(2,3),cv::Range::all()));

应该做你想做的。这使用重载的 operator()(cv::rowRange, cv::colRange) 来提取选定的行。

关于c++ - 从 OpenCV 中的 Matrix 访问值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14835071/

相关文章:

c++ - 在参数包中分配模板包装器

matlab - Matlab中矩阵在空间中的旋转会导致移动而不是旋转到放置位置

matlab - 如何获得这个matlab矩阵的长度(行数)?

C++ OpenCV mat.at 在使用数据时出现访问冲突

python - 如何将特定的 C 模块移植到 Python 3?

c++ - 使用给定参数调用构造函数的可变参数函数

c++ - 从另一个类访问 C++ 静态成员

c++ - 如何将 USB 端口的数字信号加载到内存中?

function - 在不添加该路径的情况下调用不在 Matlab 路径上的函数

c++ - 如何从图像中分割出真实的人体形状?