Индекс столбца OpenCV пропускает строки при использовании 16-битного PGM (интерфейс C ++) - PullRequest
0 голосов
/ 08 ноября 2011

Странная проблема. Я написал пару функций для преобразования из мата в массив 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];
                }
            }

Я не могу не думать, что это как-то связано с 16-битным представлением в Mat, но я не могу найти информацию об этом. Также странно, что он отлично работает в одном измерении, а не в другом ...

У кого-нибудь есть идея?

Заранее спасибо

1 Ответ

0 голосов
/ 08 ноября 2011

Я думаю, что это вызвано использованием "unsigned int".Попробуйте использовать "unsigned short" для 16-битного изображения в градациях серого.

...