假设我有一个单行x的矩阵。在MATLAB中,我可以通过
访问x的特定元素x=[10 6 9 12 15 20 22];
index=[1 3 7];
y=x(index)
y =
10 9 22
我如何在OpenCV (没有for loop)中做同样的事情?
我知道有办法访问矩阵的行或列,但我找不到只访问OpenCV中特定元素的方法。
编辑:
我正在使用C ++。如果x是NxM矩阵并且我想访问第5列中的某些元素,该怎么办?在MATLAB中,我可以将其作为x(索引,5)。我可以肯定在OpenCV中使用for循环。我的问题是,是否有任何现成的OpenCV函数返回x的特定元素?
答案 0 :(得分:0)
如评论中所述,您必须使用循环。与Matlab不同,您无法一次访问所有元素。假设您有一个带有一个通道的行矩阵,如下所示,以下代码将起作用(取决于您使用的数据类型):
int foo[TheNumberOfColumnsYouNeed];
for(int i = 0; i < matrix.cols; i++)
{
if(i == TheColumnsYouNeed)
foo[i] = matrix.at<double>(0, i);
}
如果您特别想要单行矩阵的第5列,则可以在没有循环的情况下执行以下操作(假设数据类型为double):
foo = matrix.at<double>(0, 5);
答案 1 :(得分:0)
您可以使用与cv :: sortIdx相同的机制,使用与Sorting cv::Mat in OpenCv
相同的机制来循环使用索引来控制值的cv :: Mat即如果你有一个包含索引的cv :: Mat,你可以将它传递给包含数据的cv :: Mat并返回该子集。