7
votes

Itérer via un bloc de graphique 2D par bloc en C ++

Je travaille sur une affectation des devoirs pour un programme de rétrécissement de l'image en C ++. Ma photo est représentée par un tableau 2D de pixels; Chaque pixel est un objet avec des membres "rouge", "vert" et "bleu". Pour résoudre le problème, j'essaie d'accéder au tableau 2D un bloc à la fois, appelez une fonction qui trouve la valeur RGB moyenne de chaque bloc et ajoute un nouveau pixel à une matrice d'image plus petite. La taille de chaque bloc (ou facteur d'échelle) est entrée par l'utilisateur.

À titre d'exemple, imaginez un tableau 2D de 100 points comme MyARRAY [10] [10]. Si l'utilisateur saisit un facteur de rétrécissement de 3, je devrais éclairer des matrices de taille 3 de la taille 3 par 3. Je n'ai pas à rendre compte du débordement, donc dans cet exemple, je peux ignorer la dernière ligne et la dernière colonne.

Array 2D

J'ai la plupart du programme écrit, y compris la fonction pour trouver la couleur moyenne. Je suis confus avec comment traverser le tableau 2D. Je sais comment faire glisser une matrice 2D séquentiellement (une ligne à la fois), mais je ne sais pas comment obtenir de petits carrés dans un tableau.

Toute aide serait grandement appréciée!


0 commentaires

3 Réponses :


0
votes

Vous pouvez utiliser deux boucles imbriquées un pour X et un pour Y et déplacer le point de départ de ces boucles sur l'image. Comme il s'agit de devoirs, je ne mette aucun code, mais vous devriez pouvoir y travailler.


0 commentaires

3
votes

Voici comment vous traversez un tableau en C ++:

for(i=0; i < m; i++) {
  for(j=0; j < n; j++) {
    // do something with myArray[i][j] where i represents the row and j the column
  }
}


1 commentaires

J'ai passé plusieurs heures à travailler sur cette fonction (à la fois sur l'ordinateur et sur papier). Je suis assez certain que j'ai besoin de cinq variables à parcourir - la normale I et J, plus Xstart, Ystart et l'entrée d'utilisateur Blocksize. J'ai vraiment du mal à comprendre quand et comment mettre à jour les variables.



3
votes

Quelque chose comme ça devrait fonctionner: xxx

largeur est la largeur entière, block_width est la longueur de vos carrés bleus sur le diagramme


2 commentaires

Salut pubby, je ne suis pas sûr que si j'ai traduit ce problème, mais je suis entré dans le code suivant pour voir si je pouvais obtenir le tableau 2D à imprimer correctement en fonction de votre fonction, et il semble que ce ne soit accéder aux trois premières colonnes toutes les trois premières colonnes. descente.


Agréable! Il travaille surtout, bien que cela dépend de la limite du tableau en ce moment et d'imprimer des adresses, mais je peux certainement travailler avec elle. Merci beaucoup!