有一个奇怪的问题。我编写了几个函数来从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位表示有关,但我找不到相关的信息。奇怪的是,它在一个维度上工作得很好而不是另一个维度....
有人有想法吗?
提前致谢
答案 0 :(得分:0)
我认为这是由“unsigned int”使用引起的。尝试16位灰度图像的“无符号短路”。