0

奇妙な問題を抱えています。マットから2Dint配列に、またはその逆に変換する関数をいくつか作成しました。私は最初に正常に動作する3チャネル8ビットバージョンを作成しましたが、16ビットグレースケールバージョンは1つの次元のインデックスをスキップしているようです。

基本的に、1行おきに空白になります。(1秒おきに書き込まれるだけです。)私が考えることができる唯一のことは、それが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];
                }
            }

Matの16ビット表現と関係があると思わずにはいられませんが、これに関する情報は見つかりません。それが一方の次元でうまく機能し、もう一方の次元ではうまく機能しないことも奇妙です。

誰かアイデアがありますか?

前もって感謝します

4

1 に答える 1

0

これは「unsigned int」の使用が原因だと思います。16 ビット グレースケール イメージの場合は「unsigned short」を試してください。

于 2011-11-08T00:58:44.347 に答える