【问题标题】:Access values from Matrix in OpenCV从 OpenCV 中的矩阵访问值
【发布时间】:2013-02-12 14:42:24
【问题描述】:

例如,我有一个大小为 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 循环来做到这一点

【问题讨论】:

    标签: c++ matlab opencv matrix pixel


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-12
        • 2023-04-05
        • 1970-01-01
        • 2014-05-03
        • 2014-10-13
        • 2012-09-04
        • 1970-01-01
        相关资源
        最近更新 更多