Bonjour,
Je souhaiterais superposer une image obtenue par matlab (avec la fonction imagesc et dont certains pixels sont transparents), sur une image de fond de format .jpg.
Pouvez-vous m'aiguiller ?
Merci bien.
Bonjour,
Je souhaiterais superposer une image obtenue par matlab (avec la fonction imagesc et dont certains pixels sont transparents), sur une image de fond de format .jpg.
Pouvez-vous m'aiguiller ?
Merci bien.
Les deux images ont-elles les mêmes dimensions ?
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
Non, les deux images n'ont pas la même dimension.
Celle générée par matlab est plus petite que l'image .jpg.
Un exemple de superposition :
Voir ici : http://briot-jerome.developpez.com/m...ages/#LIII-B-1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 load clown figure colormap(map) imagesc(X) axis image hold on rgb = rand(70,100,3); image(150,50,rgb)
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
Merci Dut, j'ai progréssé mais ce n'est toujours pas ça.
En fait, il ne s'agit pas exactement du traitement d'une seule image mais d'une succession d'images que je fais défiler pour obtenir une vidéo.
La première image obtenue avec le code ci dessous est cohérente mais le reste de mes images générées par matlab ne suit pas. En gros, qu'en ajoutant cette superposition de l'image sur une image de fond, j'obtiens que la première image générée par imagesc?
En revanche l'image de fond(qui n'est jamais la même dans le film) change.
Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 rgb = imread('nom_image.jpg'); rgb2 = imresize(rgb,[160 240]); image(rgb2,'xdata',1,'ydata',1); hold on; imagesc(result)
Je ne sais pas si mon problème apparait clair ?
Si je comprends bien, les deux images n'ont pas les mêmes dimensions.
Par contre, tu veux les superposer exactement donc tu redimensionnes la plus petite.
Donc pour l'image du fond, seuls les pixels sous les pixels "transparents" de result seront visibles, c'est ça ?
Sinon, donne-nous un aperçu de ce que tu cherches à obtenir
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
L'image du fond c'est nom_image.jpg. L'image du fond est plus grande que l'image générée via imagesc. Et je la redimensionne pour qu'elle soit de la même taille que result.
J'aimerais superposer sur nom_image.jpg les pixels non transparents de mon image result.
Un exemple :
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
16 % rgb = imread('nom_image.jpg'); rgb = rand(10,10,3); r = 5; c = 5; result = round(rand(r,c)*10); mask = result<=5; figure image(rgb,'xdata',[1 c],'ydata',[1 r]) hold on im = imagesc(result,'xdata',[1 c],'ydata',[1 r]); set(im,'alphadata',mask); axis image
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
Merci pour l'aide. Mais je n'ai pas encore résolu mon problème.
Voici mon codeLa première image apparait à peu près correcte mais la palette de couleur va de [0 64] et non de [-10 -5] puisqu'il doit prendre la palette de couleur de mon image .jpg et non celle de mon imagesc... Et puis une seule image s'affiche et non une succession d'images.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 rgb = imread(nom_image.jpg); image(rgb,'xdata',[1 240],'ydata',[1 160]) hold on mask = result<=-5; im = imagesc(result,'xdata',[1 240],'ydata',[1 160]); set(im,'alphadata',mask); axis image caxis([-10 -5]); colorbar('location','EastOutside');
J'ai essayé un autre code pour mettre mes images .jpg en image de fond :La superposition de mes deux images n'apparait à aucun moment ici.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 rgb = imread(nom_image.jpg); ax=axes('position',[0 0 1 1]); image(rgb,'xdata',[1 240],'ydata',[1 160]) uistack(ax,'bottom'); mask = result<=-5; im = imagesc(result,'xdata',[1 240],'ydata',[1 160]); set(im,'alphadata',mask); axis image caxis([-10 -5]); colorbar('location','EastOutside');
Je ne comprends pas pourquoi les pixels de "result" qui dépassent le seuil défini ne sont pas transparents mais blancs (puisqu'ils recouvrent toute l'image et non certains pixels) ?
Que renvoie ceci ?
En remplaçant 'nom_image.jpg' par le vrai nom du fichier bien entendu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part infos = imfinfo('nom_image.jpg');
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
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
16
17
18 infos=imfinfo('./imnom_image.jpg') infos = Filename: [1x69 char] FileModDate: '04-mars-2013 15:25:30' FileSize: 171572 Format: 'jpg' FormatVersion: '' Width: 1280 Height: 960 BitDepth: 24 ColorType: 'truecolor' FormatSignature: '' NumberOfSamples: 3 CodingMethod: 'Huffman' CodingProcess: 'Sequential' Comment: {}
Donc comme tu peux le lire toi-même, les pixels de l'image stockée dans imnom_image.jpg sont en couleurs vraies (truecolor) donc RGB.
Un bitdepth de 24 signifie qu'un pixel est codé sur 3 valeurs de 8bit (3x8=24) chaque valeur correspondant respectivement au rouge (R), au vert (G) et au bleu (B).
Il n'y a pas de palette associée à ce type de couleurs.
Tu peux toujours en créer une comme je l'ai fais ici.
Le soucis sera ensuite de relié les valeurs de result à cette palette.
Tu devrais bien réfléchir et nous dire exactement ce que tu cherches à faire.
Quel est le lien entre result et imnom_image.jpg ?
Que fais -tu exactement ?
Quel est le sujet de ton étude ?
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
Je n'ai plus de problème de superposition d'images (j'avais un petit soucis d'algorithme que j'ai résolu), excepté ce lui de la palette.
En fait, j'aimerais que sur l'image finale la palette de couleur affiche les résultats de "result" (résultats compris en -10 et -5). Or là, ma palette va de 0 à 64.
Y'a t-il une option dans colorbar, colormap qui me permette de préciser la palette de l'image que je veux afficher ?
Merci.
Inverse l'ordre d'affichage des deux images :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 rgb = imread(nom_image.jpg); mask = result<=-5; im = imagesc(result,'xdata',[1 240],'ydata',[1 160]); set(im,'alphadata',mask); axis image caxis([-10 -5]); colorbar('location','EastOutside'); hold on image(rgb,'xdata',[1 240],'ydata',[1 160])
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
Bonjour,
J'avais déjà essayé cette option qui ne résoud pas mon problème.
L'image jpg recouvre intéralement mon autre image. La superposition n'est plus ok dans ce cas là.
Arf, oui !
Il devrait suffir d'utiliser uistack :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 rgb = imread(nom_image.jpg); mask = result<=-5; im = imagesc(result,'xdata',[1 240],'ydata',[1 160]); set(im,'alphadata',mask); axis image caxis([-10 -5]); colorbar('location','EastOutside'); hold on im = image(rgb,'xdata',[1 240],'ydata',[1 160]); uistack(im,'bottom');
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
Cette option ne va pas non plus.
La première image est ok. Mais je fais défiler des images les unes à la suites des autres et le souci se pose dès la deuxième image.
La palette de couleur revient de 0 à 64 et des "restes" de la première image se superposent à la deuxième image![]()
Ben oui, mais sans voir ton code complet, difficile de t'aider mieux
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
Un "close" avant la fin de ma boucle fait l'affaire
Problème résolu.
Merci beaucoup Dut.![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager