Bonjour à tous,
ma maîtrise limitée du c++ et de ses rouages m'empêchent de débuguer mon code avec succès, j'en appelle donc à la communauté en espérant ne pas trop vous embêter et apprendre de mes erreurs.
Pour essayer de décrire ma situation succintement, j'ai défini une template classe que j'ai nommée image:
Ensuite, je défini une structure rgb, me permettant de travailler avec des images "triples" (3 composantes ou bandes).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 template <classe T> class image { public: // diverses méthodes... T *data; private: int width, height; }
Que je manipule dans mes fonctions principales de la manière suivante (je n'écris ici que la ligne d'allocation mémoire et le remplissage, je vous épargne la définition d'imRef qui n'a pas d'importance ici):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 typedef struct { uchar r, g, b; } rgb;
Jusqu'ici tout va bien ! Maintenant mon problème est que je cherche une solution pour travailler avec des images qui n'ont plus 3 composantes, mais un certain nombre N (N>>3). Chacune de ces composantes est à proprement dit une image elle-même, de taille constante width*height.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 image<rgb>* im = new image<rgb>(width, height); // quelque part plus loin ... image<float> *red = new image<float>(width, height); image<float> *green = new image<float>(width, height); image<float> *blue = new image<float>(width, height); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { imRef(red, x, y) = imRef(im, x, y).r; //remplissage imRef(green, x, y) = imRef(im, x, y).g; imRef(blue, x, y) = imRef(im, x, y).b; } }
Je cherche donc à définir un "tableau de tableau" de manière à récupérer un pointeur, que j'appelle bands, me permettant d'accéder via bands[i] à la composante n°i de mon image.
J'ai donc fonctionné en définissant une autre structure hyperSpec de la sorte:
Que je veux ensuite utiliser comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 typedef struct { uchar *bands; } hyperSpec;
L'idée étant, après remplissage, de récupérer les composantes via b[i].
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 image<hyperSpec>* theIm = new image<hyperSpec>(width, height); //quelque part plus loin ... image<float> *b[num_bands] = new image<float>(width, height); // erreurs de compilation ici for (int i = 0; i<num_bands; i++){ for (int y = 0; y < height; y++) { // remplissage for (int x = 0; x < width; x++) { imRef(b[i], x, y) = imRef(im,x,y).bands[i] ; // erreurs de compilation ici } } }
Mais ces dernières lignes de code me renvoie des erreurs de compilation que je n'arrive pas à corriger. Ces erreurs sont les suivantes :
J'ai essayé de ne mettre que le strict minimum de code tout en essayant d'être clair sur mon problème, si ce n'est pas le cas n'hésitez pas à me demander des compléments.- expected constant expression
- cannot allocate an array of constant size 0
- 'b' : array initialization needs curly braces
- 'new' : 'image<T>' no default constructor to initialize arrays of objects
with
[
T=float
]
Merci d'avance
Partager