2013-02-19 137 views
1

访问多通道矩阵的第n行通道的语法是什么?我可以接入信道(I,J);元:: n,而是什么是使用功能,如行,rowRange,语法.....访问OpenCV Mat中的多个通道

示例代码:

Mat M(10, 3, CV_32SC3); 
cout << M.at<Vec3d>(0,0)[1] << endl; // This works 
cout << M.row(0)[1] << endl; // Syntax of this 

回答

2

我认为你正在寻找如下:

cv::Mat M(10, 3, CV_32SC3); 
cv::Mat_<cv::Vec3d> helpimg = M; 
helpimg .row(0).begin()[0][0] = 2.5; 

我可以编译它,但我没有测试它。告诉它是否有效。你可以用它来得到cols值:

helpimg .col(0).begin()[0][0] = 4.5; 
+1

注意,mat.col(0)做了一个深层复制,所以'helpimg .col(0).begin()[0] [0] = 4.5;'不会改变helpimg的内容! (是的,它是行()和col()之间的区别!) – berak 2013-02-19 17:05:58

1

约这样做什么:

cout << M.row(0).col(1) << endl; 

Mat::row函数返回一个Mat,这样你就可以再次调用要么rowcol的结果,让你从它需要的行或列。

4
Mat.row(0) returns a Mat, so it's the same game as before: 

// if it's really INT 3channels(like your ex. above), you have to use m.at<Vec3i> !! 
Mat M(10, 3, CV_32SC3); 

// 3rd row 
Mat r = m.row(3);   

// r has only 1 row (3 elems), last pixel there 
cout<< r.at<Vec3i>(0,2)[0];