2016-10-14 46 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