我有一个bmp图像,可以转换为二维数组。这很好。 但我需要比较一个像素(coordonate(i,j))与其邻居(8像素)的颜色。 如果一个或多个颜色相同,我将它们与其他邻居进行比较,然后...... 所以我打算使用递归函数。访问冲突:从bmp映像运行数组
的代码:
void verifIdPoint (int TG[NBLIG][NBCOL], int T[NBLIG][NBCOL], short int Tpassage[NBLIG][NBCOL], int i, int j)
{
int u, v;
//printf ("saisie: %d %d \n", i, j);
//system("pause");
for (u=i-1; u<=i+1; u++)
{
for(v=j-1; v<=j+1; v++)
{
if(u>0 || v>0 || u<NBLIG || v<NBCOL)
{
if (TG[u][v] == TG[i][j])
{
tableauImgIntermediaire (TG, T, i, j);
//printf ("TG[%d][%d]===== TG[%d][%d]\n", u, v, i, j);
if (u<=0 || v<=0 || u>=NBLIG || v>=NBCOL)
{
}
else
{
if (Tpassage[u][v] == 0)
{
printf ("Passage: u v T %d %d %d \n", u, v, Tpassage[u][v]);
Tpassage[u][v] = 1;
verifIdPoint (TG, T, Tpassage, u, v);
}
}
}
}
}
}
}
该代码可以使用的图像,只需用相同的颜色(如在中间的灰色圆圈)的一部分。 但是当颜色像从(0,0)到(300,200)的棒子时,我有“访问冲突(段错误)”错误...
图像大小是300x200。 我想,这是因为我试图访问我未分配的数组的一部分。
感谢, (对不起,我的英语)
问候
那些原来的'如果'是讨厌的。但是在for循环中,'u'和'v'从* u = i-1 * *到*'u <= i + 1'。虽然没有解释“i”和“j”是什么参数,但上下文表明他们是其他人称之为“x”和“y”的东西。在这种情况下,(1)检查需要'if u> = 1'(并且镜像为'width-1'),但是(2)这种特殊的检查是*不必要的(也就是说,如果输入是正确)。 +1,但是,因为注意到这些奇怪的测试搞砸了本应该是一个简单的工作。 – usr2564301
嗯,这里是我的理解:给出函数('i','j'),然后'u','v'迭代,然后进行边界检查。因此,如果'i = j = 0','u'和'v'的范围从-1到1.因为我假设边缘应该被测试(例如(0,1),(1,0) ),应该允许'u'和'v'采取这些值,而不是给他们一个额外的边界。 – shade4159