4

たとえば、サイズが 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 ++でこれを行う方法を誰か教えてもらえますか

4

2 に答える 2

4

何らかの方法で反復せずに行/列のランダムな順序を抽出する直接的な方法はありません。最も簡単な方法は、行を抽出してターゲット マトリックスに 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)、選択した行を抽出します。

于 2013-02-12T16:04:06.903 に答える
0

forこれはループを使用しないと不可能だと思いますが、これを行う最も速い方法はを使用することmemcpyです。ここで完全なコードを見ることができます

于 2015-06-22T16:07:50.407 に答える