Почему этот код выходит из строя

#c #opencv

#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  = amp;((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 amp;amp; (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 amp;amp; (col-i)>0   )
                                    {
                                    uchar* temp_ptr1  = amp;((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;   
                                    }
                                }
                            }
            }
    }
 

Комментарии:

1. Итак, где происходит сбой?

2. Мои глаза! Что такое rows и cols определяется как? Что такое a CvPoint ?

3. @MarkB rows и cols являются int s, хранящими высоту и ширину изображения, пожалуйста, игнорируйте CvPoint , что он закрался по ошибке.

4. Где внутри if? У вас есть обратная трассировка? Какой компилятор? Вы просматривали код в отладчике GDB или VC?

Ответ №1:

Ваш j индекс не привязан к массиву k . Оно не может быть больше 5!

В 5 for -м вы должны изменить верхнюю границу на 5 not 6 .

Комментарии:

1. Отредактировал свой код, это была опечатка. Его сбой по адресу, который я изменяю, используя temp_ptr1

Ответ №2:

k имеет только три строки, и все же вы обращаетесь к несуществующим строкам 4 и 5 в вашем первом внутреннем j for цикле. После того, как вы получите доступ к этим строкам, все ставки отменяются для остальной части вашей программы.

Ответ №3:

Я не знаю, но код очень подвержен ошибкам. Используйте интерфейс C для OpenCV.