从cv :: Mat获取x,y,z线

时间:2015-11-22 18:35:16

标签: c++ opencv

使用reprojectImageTo3D(..)我得到一个带3D点的Mat。现在我想访问这些点的x,y,z值。但我不知道我怎么能这样做?

我尝试过这样的事情:

(new3d.row(100).col(1)).x 

但似乎没有这种方式。

我非常感谢这里的任何帮助。

2 个答案:

答案 0 :(得分:2)

正如Miki指出的那样,你想使用Mat :: at()。 CV文档中概述了这一点:http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#mat-at

Mat :: at():返回对指定数组元素的引用。它有各种签名:

C++: template<typename T> T& Mat::at(int i) const 
C++: template<typename T> const T& Mat::at(int i) const 
C++: template<typename T> T& Mat::at(int i, int j) 
C++: template<typename T> const T& Mat::at(int i, int j) const 
C++: template<typename T> T& Mat::at(Point pt) 
C++: template<typename T> const T& Mat::at(Point pt) const 
C++: template<typename T> T& Mat::at(int i, int j, int k) 
C++: template<typename T> const T& Mat::at(int i, int j, int k) const 
C++: template<typename T> T& Mat::at(const int* idx) 
C++: template<typename T> const T& Mat::at(const int* idx) const 

Parameters:  
i – Index along the dimension 0 
j – Index along the dimension 1 
k – Index along the dimension 2 
pt – Element position specified as Point(j,i) . 
idx – Array of Mat::dims indices.

这篇文章详细介绍:How to access data from cv::Mat

答案 1 :(得分:1)

从[文档]中可以看到:

  

C ++:void reprojectImageTo3D(InputArray disparity,OutputArray _3dImage,InputArray Q,bool handleMissingValues = false,int ddepth = -1)

_3dImage - 输出与视差大小相同的3通道浮点图像。 _3dImage(x,y)的每个元素都包含从视差图计算的点(x,y)的3D坐标。

因此,您的new3d矩阵是一个3通道浮点,即CV_32FC3

您可以访问其值,如:

for(int r=0; r<new3d.rows; ++r)
{
    for(int c=0; c<new3d.cols; ++c)
    {
        Vec3f point = new3d.at<Vec3f>(r,c);
        // x = point[0];
        // y = point[1];
        // z = point[2];

        std::cout << point << std::endl;
    }
}