为什么这段代码崩溃了

时间:2011-10-24 13:49:24

标签: c++ opencv

这是一个外行人试图模糊图像,我没有使用任何特定的[已知]算法,我正在实施我自己的技术。

float k[][5]= { .01, .01, .01, .01, .01,
                .01, .01, .01,  .01, .01,
                .01, .01, .01,  .01, .01};

for( row = 0; row < rows; ++row) 
    {
            sum=0;
            for ( col = 0; col < cols; ++col) 
            {               
                            temp_ptr  = &((uchar*)(img->imageData + (img->widthStep*row)))[col];
                            for( i=1; i<6;i++)
                            {
                                float factor=exp((float)(-(i-col)*(i-col)/(2*sigma2))); 
                                sum+=factor;
                                for( j=1; j<6 ;j++)
                                {
                                    if( (row-j)>0 && (col-i)>0   )
                                    k[i-1][j-1]+=factor*temp_ptr[row-i+col-j];
                                }
                                for( j=1; j<6 ;j++)
                                {
                                    if( (row-j)>0 && (col-i)>0   )
                                    {
                                    uchar* temp_ptr1  = &((uchar*)(img->imageData + (img->widthStep * (row-1) )))[col-1];

                                temp_ptr1[0]=temp_ptr[0]*k[i-1][j-1]/sum;   
                                temp_ptr1[1]=temp_ptr[1]*k[i-1][j-1]/sum;   
                                temp_ptr1[2]=temp_ptr[2]*k[i-1][j-1]/sum;   
                                    }
                                }
                            }
            }
    }

3 个答案:

答案 0 :(得分:1)

您的j索引超出了数组k的范围。 它不能大于5!

在第5个for中,您应该将上限更改为5而不是6

答案 1 :(得分:0)

k只有三行,但您在第一个内部j for循环中访问了不存在的第4行和第5行。在您访问这些行之后,您的所有其他程序都会关闭所有投注。

答案 2 :(得分:0)

我不知道,但代码非常容易出错。使用C ++接口到OpenCV。