例如,我有一个大小为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
。您可以在这里看到完整的代码