#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
определяется как? Что такое aCvPoint
?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.