访问OpenCV中矩阵中的值



例如,我有一个大小为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]

有人能告诉我如何在C++中使用OpenCV做到这一点而不使用for循环吗

没有直接的方法可以在不以某种方式迭代的情况下提取行/列的随机顺序。最简单的方法是提取行,并将它们逐个推入目标矩阵。假设您已声明矩阵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)来提取所选行。

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

相关内容

  • 没有找到相关文章

最新更新