Странная проблема. Я написал пару функций для преобразования из мата в массив 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, но я не могу найти информацию об этом. Также странно, что он отлично работает в одном измерении, а не в другом ...
У кого-нибудь есть идея?
Заранее спасибо