2012-08-24 2 views
0

Le problème de base est la suivante:OpenCV: Remplir les éléments manquants dans CVMat avec avg des voisins non-zéro les plus proches?

J'ai un CVMat, le type CV_8UC1, qui est la plupart du temps rempli avec des nombres entiers (et, en fait, les caractères, mais peu importe) entre 1 et 100 inclus. Les éléments restants sont des zéros.

Dans ce cas, 0 signifie fondamentalement "inconnu". Je veux remplir les éléments inconnus avec, essentiellement, la moyenne de ses plus proches voisins ... si cette matrice représentait une surface 3d avec un tas de trous, je veux remplir doucement les trous.

En gardant à l'esprit, bien sûr, qu'il est possible qu'il y ait quelques trous plutôt gros.

L'efficacité n'est pas super important, car cette opération ne va se produire qu'une seule fois, et la matrice en question ne dépasse pas environ 1000x1000.

Voici le code que je dois terminer:

for(int x=0; x<heightMatrix.cols; x++) { 
    for (int y=0; y<heightMatrix.rows; y++) { 
     if (heightMatrix.at<char>(x,y) == 0) { 
      // ??? 
     } 
    } 
} 

Merci !!

Répondre

0

Que diriez-vous plutôt:

mettre vos données dans une image et d'utiliser l'image de fermeture avec un grand noyau (ou avec beaucoup d'itérations): http://opencv.willowgarage.com/documentation/image_filtering.html#morphologyex

+0

Merci; Cependant, le problème avec l'utilisation de moyennes comme ceci est que s'il y a d'autres zéros à proximité, les zéros se retrouvent "dans le mix". En outre, lorsqu'il y a de plus grandes zones de zéros contigus, cette méthode finit par être * extrêmement * lente. – DanM

+0

Modifie ma réponse, cela pourrait faire l'affaire? –

+0

Excellent! Je pense que ça va marcher pour moi. Merci. – DanM

Questions connexes