2011-04-06 4 views
2

J'essaie de remplir une matrice opencv avec certaines valeurs, mais je continue d'obtenir des segcages. Le code est le suivant:Segfault lors de l'utilisation de cv Mat :: at

Mat mask_gx(in_window_size, in_window_size, image.type()); 
    for(int i = 0; i <= in_window_size; i++) 
    { 
    for(int j = 0; j <= in_window_size; j++) 
    { 
     double gx = (-i/in_sigma) * pow(M_E, ((pow(i, 2)* pow(j, 2))/pow(in_sigma, 2))/(-2)); 
     mask_gx.at<double>(j, i) = gx; 
    } 
    } 

Le problème est dans la dernière ligne. Je l'ai testé avec:

mask_gx.at<int>(j, i) = 1; 

et je reçois toujours le segfault.

Est-ce que quelqu'un a des idées sur ce qui semble être le problème avec ce code?

Répondre

1

Si in_window_size est le montant des valeurs dans chaque dimension, alors il devrait être < et non <= dans les comparaisons for -loop, je crois.

+0

Merci, je l'ai corrigé, mais cela ne résout pas le problème. Fait intéressant, la dernière ligne fonctionne parfaitement bien en dehors de la boucle. – mobearette

+0

Se pourrait-il que 'image.type()' ne corresponde pas correctement à un type qui permet de définir des valeurs 'double' (comme dans' mask_gx.at ')? Peut-être que cela correspond à un type qui est plus petit qu'un «double»? –

+0

Ce problème devient de plus en plus intéressant. La valeur de in_window_size est 11. Lorsque j'essaie de mettre des valeurs fixes dans la boucle, cela fonctionne parfaitement jusqu'à 7. Mais tout ce qui suit 7 provoque une erreur de segmentation. Encore une fois, le code suivant fonctionne parfaitement bien en dehors de la boucle: 'mask_gx.at (11, 11) = 1.0;' – mobearette

Questions connexes