2016-10-14 22 views
0

我得通过OpenCV的Mat的坐标迭代一个问题:迭代至Mat

cv::Mat picture = cv::Mat(depth.rows, depth.cols, CV_32F); 

    for (int y = 0; y < depth.rows; ++y) 
    { 
     for (int x = 0; x < depth.cols; ++x) 
     { 
      float depthValue = (float) depth.at<float>(y,x); 
      picture.at<float>(y, x) = depthValue; 
     } 
    } 
    cv::namedWindow("picture", cv::WINDOW_AUTOSIZE); 
    cv::imshow("picture", picture); 

    cv::waitKey(0); 

得到的图片:

之前(深度)

enter image description here

后(图)

enter image description here

它看起来像是 1.缩放和 2.停在约三分之一的宽度。有任何想法吗?

+0

是不是还深入cv_32f?告诉我们它的定义请 –

+0

此外'CV_32F'在这里是无效的。你应该使用'CV_32FC <通道数>'。详情请看[这里](http://stackoverflow.com/a/37530646/5008845) – Miki

回答

4

看起来你的深度图像有3个通道。

所有通道值都为BW图像(B=G=R)一样的,所以你必须BGRBGRBGR,而不是GrayGrayGray,而你试图访问它,因为它是1路,这就是为什么图像被横向拉长3倍。

在运行循环之前尝试cv::cvtColor(depth,depth,COLOR_BGR2GRAY)

+0

太好了,谢谢 – TobSta