4

例如,我有一个大小为 10x10 的矩阵 M,我有一个长度为 5 的列矩阵 ind
如何使用 OpenCV 将 A(ind,:) 分配给 C++ 中的新矩阵 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]

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

4

2 回答 2

4

没有以某种方式迭代的直接方法来提取行/列的随机排序。最简单的方法是提取行并将它们一一推送到目标矩阵中。鉴于您已声明矩阵 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)来提取选定的行。

于 2013-02-12T16:04:06.903 回答
0

我认为不使用for循环是不可能的,但最快的方法是使用memcpy. 你可以在这里看到完整的代码

于 2015-06-22T16:07:50.407 回答