int maxNum(int *n)
{
int Maximum = n[0];
for(int i = 1; i <= 8; i++)
{
if( Maximum < n[i] )
Maximum = abs(n[i]);
}
return Maximum;
}
void DibHomoginityDetect(CDib& dib)
{
register int i,j,x[8];
int w = dib.GetWidth();
int h= dib.GetHeight();
CDib cpy =dib;
BYTE** ptr1 = dib.GetPtr();
BYTE** ptr2 = cpy.GetPtr();
for(j = 1;j<h-1;j++)
{
for(i=1;i<w-1;i++)
{
x[1]= (ptr2[j][i]-ptr2[j-1][i-1]);
x[2] =(ptr2[j][i]-ptr2[j-1][i]);
x[3] =(ptr2[j][i]-ptr2[j-1][i+1]);
x[4] =(ptr2[j][i]-ptr2[j][i-1]);
x[5] =(ptr2[j][i]-ptr2[j][i+1]);
x[6] =(ptr2[j][i]-ptr2[j+1][i-1]);
x[7] =(ptr2[j][i]-ptr2[j+1][i]);
x[8] =ptr2[j][i]-ptr2[j+1][i+1];
//assign the central pixel of window to image central pixel
ptr1[j][i] = (BYTE)maxNum(x);
}
}
}
这个程序出了什么问题..据我所知它应该可以工作,但我得到异常错误...
任何人都可以告诉我,我哪里弄错了.. ..谢谢
答案 0 :(得分:4)
从代码中很难说,但我猜你的for循环应该是:
for(int i = 0; i < 8; i++)
C ++中的数组是从零开始索引的,而不是一个。
答案 1 :(得分:0)
不知道这是否导致错误:
for(j = 1;j<h-1;j++)
{
for(i=1;i<w-1;i++)
{
x[1]= (ptr2[j][i]-ptr2[j-1][i-1]);
x[2] =(ptr2[j][i]-ptr2[j-1][i]);
x[3] =(ptr2[j][i]-ptr2[j-1][i+1]);
x[4] =(ptr2[j][i]-ptr2[j][i-1]);
x[5] =(ptr2[j][i]-ptr2[j][i+1]);
x[6] =(ptr2[j][i]-ptr2[j+1][i-1]);
x[7] =(ptr2[j][i]-ptr2[j+1][i]);
x[8] =ptr2[j][i]-ptr2[j+1][i+1];
//assign the central pixel of window to image central pixel
ptr1[j][i] = (BYTE)maxNum(x);
}
}
似乎x [1] ... x [8]始终是i=w-2
和j=h-2