我正在尝试模糊图像。
我正在使用名为k[][3]= { 1, .01, 1, .01, 0, .01, 1, .01, 1};
代码如下:
void blur(IplImage *notgray)
{
IplImage *img = cvCreateImage(cvGetSize(notgray), notgray->depth, 1);
cvCvtColor(notgray, img, CV_RGB2GRAY);
int rows=img->height,cols=img->width,row,col,i,j,ki,kj;
uchar* temp_ptr=0 ;
float sum,k[][3]= { 1, .01, 1,
.01, 0, .01,
1, .01, 1};
for( row = 0; row < rows; ++row)
{
sum=0;
for ( col = 0; col < cols; ++col)
{
temp_ptr = &((uchar*)(img->imageData + (img->widthStep*row)))[col];
for( j=-1,ki=0; j<=1;j++,ki++)
{
for( i=-1,kj=0; i<=1;i++,kj++)
{
int x2=col+i;
int y2=row+j;
if ( x2>=0 && x2<img->width && y2>=0 && y2<img->height)
{
sum=sum+k[ki][kj];
if (sum<0) sum=0; else if (sum>255) sum=255;
temp_ptr[0] =(uchar) sum;
}
}
}
}
}
}
我知道输出真的取决于我的算法,但是看看代码和输出我会请求一些指导我应该做些什么来进一步解决我的问题。
答案 0 :(得分:1)
你设置sum = 0;在错误的地方。由于它仅在每行的开头重置,因此每个像素将更白更白......