2011-11-08 4 views
0

奇妙な問題があります。私は、マットから2D int配列に変換する関数と、その逆の関数を書きました。私は最初にうまく動作する3チャンネルの8ビットバージョンを書いたが、16ビットのグレースケールバージョンは次元の1つでインデックスをスキップしているようだ。16ビットPGM(C++インターフェイス)を使用する場合、OpenCVの列インデックスが行をスキップします

基本的に2行目は空白です。 (1秒おきに書かれています)私が考えることができるのは、16ビット表現と関係があることだけです。私はそれがマットでの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]; 
       } 
      } 

以下がコードです。 1次元ではうまく動作し、他の次元ではうまく動作しないということも奇妙です。

誰でも知っていますか?私はこれが "unsigned int型" の使用によって引き起こされると考え、事前

答えて

0

感謝。 16ビットグレースケールイメージの場合は、 "unsigned short"を試してください。

+0

絶対にバングしてください!なぜ私は定期的なintを16ビットと考え続けるのか分かりません。あまりにも多くのマイクロコントローラのアクションのメトリング。ありがとう!!! – TheMachinist

関連する問題