0

有一个奇怪的问题。我编写了几个函数来将 mat 转换为 2D int 数组,反之亦然。我首先编写了工作正常的 3 通道 8 位版本,但 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];
                }
            }

我不禁认为它与 Mat 中的 16 位表示有关,但我找不到这方面的信息。奇怪的是,它在一个维度上运行良好,而在另一个维度上却不行......

有人有想法吗?

提前致谢

4

1 回答 1

0

我认为这是由“无符号整数”使用引起的。为 16 位灰度图像尝试“无符号短”。

于 2011-11-08T00:58:44.347 回答