我的应用程序存在一个非常奇怪的问题,即将Sobel滤镜应用于图像。
问题是,每次我的图像成倍增加并移动一点。乘法数取决于图片大小。
这是一个示例:
初始图片
添加filtr后
为简单起见,我现在只使用一种颜色和一种斧头。
这是Sobel过滤器的代码:
///sobel code
int SY[3][3] = {{ 1, 2, 1},
{ 0, 0, 0},
{-1, -2, -1}};
int sobY,sobX,sobI,sobJ;
long sumX,sumY;
int SUM;
for(sobX = 0;sobX<=(x-1);sobX++)
{
for(sobY = 0;sobY<=(y-1);sobY++)
{
sumY = 0;
sumX = 0;
if(sobY==0||sobY==(y-1))
{
SUM = 0;
} else if(sobX==0||sobX==(x-1))
{
SUM = 0;
} else
{
///Y gradient
for(sobI=-1;sobI<=1;sobI++)
{
for(sobJ=-1;sobJ<=1;sobJ++)
{
sumY = sumY + (int)(red[sobX+sobI][sobY+sobJ] * SY[sobI+1][sobJ+1]);
}
}
SUM = abs(sumX) + abs(sumY);
}
if(SUM>255)
SUM = 255;
if(SUM<0)
SUM = 0;
outputRed[sobX][sobY] = 255 - SUM;
}
}
可在此处找到简化代码和示例图像:https://db.tt/szpEMZ3f
我已经测试了没有过滤器的阅读和保存所以这个片段:
outputRed[sobX][sobY] = 255 - SUM;
看起来像那样
outputRed[sobX][sobY] = red[sobX][sobY];
这是正常的。
有人可以告诉我这段代码有什么问题吗?
答案 0 :(得分:0)
SY
的维度为[3][3]
,但您的值正在初始化为[2][14]
。这是经典的未定义行为。