从 OpenCV 中的矩阵访问值
Posted
技术标签:
【中文标题】从 OpenCV 中的矩阵访问值【英文标题】:Access values from Matrix in 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 循环来做到这一点
【问题讨论】:
【参考方案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
【讨论】:
以上是关于从 OpenCV 中的矩阵访问值的主要内容,如果未能解决你的问题,请参考以下文章