Superposer des Images
Mick
Membre
Bonjour à tous,
je me heurte à un problème :
Je dois "superposer" un certain nombre d'images pour faire une "chronophotographie"
Je me bats avec les NSComposite et la transparence, mais c'est bof pour l'instant. (cf copie d'écran : on devine vaguement qu'une balle s'est déplacée...) La transparence est à 0.1 pour chaque image et le mode est NSCompositeSourceOver.
Avez-vous par hasard déjà été confronté à ce genre de problèmes ? Y a-t-il une astuce que je ne connais pas ?..
je me heurte à un problème :
Je dois "superposer" un certain nombre d'images pour faire une "chronophotographie"
Je me bats avec les NSComposite et la transparence, mais c'est bof pour l'instant. (cf copie d'écran : on devine vaguement qu'une balle s'est déplacée...) La transparence est à 0.1 pour chaque image et le mode est NSCompositeSourceOver.
Avez-vous par hasard déjà été confronté à ce genre de problèmes ? Y a-t-il une astuce que je ne connais pas ?..
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
0.1 c'est pour 10 images.
Pour un film de 2 seconde à 25 image/s il faut un alpha de 1/(2*25), c'est à dire 0,02.
C'est de la théorie, je n'ai jamais essayé de le faire concrétement.
Disons qu'on a 10 images, chaque image va donc participer pour 1/10 dans le résultat final. Il est donc normal que la balle soit peu visible. En fait, ce qu'on obtient est une moyenne.
Pour avoir un meilleur résultat, il faut d'abord construire l'image de fond en ne conservant que les pixels qui sont communs à toutes les images. (1)
Ensuite, l'image de la balle est la différence entre l'image et l'image de fond. Il suffit d'appliquer toutes les images de balles sur le fond.
(1) Pour simplifier, on peut utiliser l'image moyenne, le résultat final sera identique à 1/10 de balle près.
@Ceroce : alors là chapeau. Bien vu ! Je m'en vais essayer ça de suite ! Je commence par superposer toutes les images avec un "over", puis je reprends les images une à une pour faire une différence. Juste une chose : comment faire techniquement ? J'utilise la méthode NSImage drawAtPoint ... operation: pour l'instant. (j'ai aussi essayé avec les layers). Faire l'image moyenne ok, mais faire la différence entre une image et l'image moyenne ?, puis comment "ajouter" la balle ? avec NSCompositeSourceOver ?
Je ne suis pas doué en graphismes...
Avec le "Difference Blend Mode" tu devrais pouvoir facilement obtenir l'image correspondant à la différence de 2 images
Petit soucis :
lorsque j'utilise le graphiccontext de ma vue, j'arrive à bricoler. Mais j'ai besoin de créer mon bitmapcontext. et là , je sèche, même avec la doc, en particulier "bytesPerRow" et "bytesPerComponent".
quelqu'un peut m'éclairer, au moins en donnant des valeurs standards où des exemples ??
Pour mon cas, j'ai créé le bitmapContext ainsi :
C'est quand même génial CoreGraphics ! Je découvre et m'émerveille...
En fait, ce n'est pas si simple. Après une petite réflexion (qui ressemble au phénomène d'absorption en physique !!), alpha n'est pas identique pour chaque image. Après calcul, l'image de fond doit avoir un alpha égal à 1, l'image en haut de la pile doit avoir un alpha égal à 1/N. L'image "i" doit avoir un alpha égal à 1/(N-i) (si la première image est l'image 0). On a alors les "contributions" de toutes les images identiques. Ceci m'a été utile pour faire l'image "moyenne" que j'envoie en PJ
Création d'une image "off" moyenne
On dessine l'image moyenne
Passage en revue de chaque image, à laquelle on soustrait l'image moyenne
En mode blend "screen", on dessine l'une après l'autre, par-dessus l'image moyenne, toutes les images précédentes.
Je ne sais plus que logiciel on utilisait sous Windows, mais on effectuait pas une sorte de " blend " comme tu le fais.
C'est potentiellement une piste pour toi je pense.
On faisait ainsi :
On prenait la première (ou la seconde image, une fois la belle assez décollée de la main).
On sélectionnait la balle (centre), on lui donnait un rayon.
Et image par image, on resélectionnait le centre de la balle (en supposant que le diamètre était le même à chaque fois).
Uniquement les cercles de sélection apparaissaient sur l'image finie...
On évitait ainsi tout l'espèce de flou sur le reste de l'image, notamment dans ton cas avec la personne.
Je sais bien qu'Ali répond juste à beaucoup de questions, mais là , je suis un peu vexé quand même /angry.gif' class='bbc_emoticon' alt='>:(' />
Le résultat à l'air pas mal, même si ton image est minuscule.
J'ai amélioré un peu le truc à l'aide des masques "couleur" de quartz 2D. Lorsque je fais la différence entre une inmage et l'image moyenne, tout est sensé être noir, sauf ce qui bouge. Y'a plus qu'à mettre un masque sur ce qui est presque noir pour que cela devienne transparent, et ensuite ajouter les images une à une en mode normal !
J'ai ajouté des sliders pour que l'utilisateur ajuste manuellement. Ca marche, mais j'ai quelques soucis de performances : lorsque l'utilisateur change un paramètre, il faut reconstruire toutes les images ... c'est long si il y en a beaucoup.
Ok pour l'astuce. Je vais essayer.
Merci
En tout cas, merci à tous de vos lumières !!