2011-10-24 73 views
0

我想模糊圖像。只在某些部分不是全部圖像模糊

我使用了一個名爲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; 

            } 
           } 
          } 
      } 

    } 
} 

我所知道的輸出實際上取決於我的算法,但看代碼和輸出我會要求一些指導我應該進一步解決我的問題。

回答

1

您設置sum = 0;在錯誤的地方。由於它只在每一行開始時重置,每個像素將變得更白更白,並且...

+0

我應該在哪裏放置它? –

+0

再向下兩行。看着它,我現在看到「temp_ptr [0] =(uchar)sum;」出於性能原因,應該真的下降四行。 –

+0

這並沒有改變我的形象.. –