1

访问多通道矩阵的第 i 行 channel::n 的语法是什么。我可以访问 channel::n 的 (i,j) 元素,但是使用 row、rowRange 等函数的语法是什么......

示例代码:

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
4

3 回答 3

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];  
于 2013-02-19T10:33:18.617 回答
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;
于 2013-02-19T14:20:18.140 回答
1

这样做怎么办:

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

Mat::row函数返回 a Mat,因此您可以再次调用row或调用col结果以从中获取所需的行或列。

于 2013-02-19T09:45:48.000 回答