2011-10-24 16 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

さらに2行下がります。それを見ると、今私は "temp_ptr [0] =(uchar)sum;"パフォーマンス上の理由から実際には4行下がるはずです。 –

+0

私のイメージはまったく変わりません。 –