2015-09-22 2 views
0

En utilisant la bibliothèque de traitement d'image CImg, j'essaie de réaliser quelque chose d'assez trivial. Je veux faire une modification complexe (y compris les étapes intermédiaires et les copies) de seulement le canal d'intensité d'une image HSI. Pour l'instant, mon approche consiste à séparer le canal d'intensité et à travailler dessus. Cependant, à la fin, je devrais d'une manière ou d'une autre renvoyer le résultat à l'image originale - et je ne sais pas comment y parvenir. Comme vous pouvez le voir dans mon exemple de code ci-dessous, j'ai essayé de convertir mon résultat d'intensité modifié en un seul canal non signé char CImg intensity_result et en l'assignant simplement au canal d'intensité de l'image originale. Mais quand j'essaie d'afficher le résultat, le programme se bloque en disant:Modification complexe d'un seul canal en utilisant CImg

... CImg :: HSItoRGB(): L'instance n'est pas une image HSI.

CImg<unsigned char> image = CImg<>("pic_small.jpg").normalize(0,255); 
CImg<> HSIimage = image.get_RGBtoHSI(); 
CImg<> intensity = HSIimage.get_channel(2); 

// ... intensity_modified = .... (intensity) 

CImg<unsigned char> intensity_result = intensity_modified.get_normalize(0,255); 
HSIimage.channel(2) = intensity_result; 
HSIimage.get_HSItoRGB().display(); 

Répondre

1

Utilisation CImg<T>::draw_image() pour dessiner une image dans (la partie) les uns des autres:

CImg<> HSI, I; // Assuming these are already filled images. 
HSI.draw_image(0,0,0,2,I); // Put content of I into HSI (at channel #2).