例如,我有一个大小为 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++ 中执行此操作
最佳答案
没有以某种方式迭代的直接方法来提取行/列的随机排序。最简单的方法是提取行,然后将它们逐行插入目标矩阵。假设您已声明矩阵 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)
来提取选定的行。
关于c++ - 从 OpenCV 中的 Matrix 访问值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14835071/