2011-11-08 31 views
0

出現奇怪的問題。我寫了幾個函數來將一個mat轉換成一個2D int數組,反之亦然。我第一次寫了3通道8位版本,可以很好地工作,但16位灰度版本似乎在某個維度上跳過索引。使用16位PGM時,OpenCV列索引跳過行(C++接口)

基本上每隔一行都是空白的。 (只有每一秒鐘都會被寫入。)我能想到的唯一的事情就是它與16位表示有關。

以下是代碼:

  // Convert a Mat image to a standard int array 
      void matToArrayGS(cv::Mat imgIn, unsigned int **array) 
      { 
       int i, j; 

       for(i=0; i<imgIn.rows; i++) 
       { 
        for(j=0; j<imgIn.cols; j++) 
        array[i][j]=imgIn.at<unsigned int>(i,j); 
       } 
      } 

      // Convert an array into a Greyscale Mat image 
      void arrayToMatGS(unsigned int **arrayin, cv::Mat imgIn) 
      { 
       int i, j; 

       for(i=0; i<imgIn.rows; i++) 
       { 
        for(j=0; j<imgIn.cols; j++) 
        imgIn.at<unsigned int>(i,j)=arrayin[i][j]; 
       } 
      } 

我忍不住想它有事情做與墊16位代表,但我無法找到此信息。奇怪的是,它在一個維度上工作正常,而不是其他的......

任何人都有想法嗎?

在此先感謝

回答

0

我認爲這是由於「無符號整型」的使用而引起的。嘗試16位灰度圖像的「無符號短」。

+0

絕對轟炸!我不知道爲什麼我一直以爲16位定期整數。太多的微控制器行動methinks。謝謝!!! – TheMachinist