|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : décembre 2007 Messages : 64 ![]() |
Bonjour
Connaitrez-vous la manière dont python gère les images au niveau du pixels? Comme copiez un bout d'une image dans une variable ou comparer deux images pour voir si elles sont identiquent? Je voudrais pouvoir découper une image en bloc et ensuite comparer ces blocs les un, les autre pour éviter les bloc identiques. Je pourrais ensuite les regrouper et en faire un tilesheet. Bonne journées |
|
|
00
|
|
|
#2 |
|
Membre chevronné
![]() Alexis Doctorant en informatique Inscription : juin 2009 Messages : 428 ![]() |
Dans l'absolu ça dépend du module que tu utilises pour la gestion d'image.
Si tu usilises numpy/scipy, il s'agit de simples tableaux à 2 (niveaux de gris) ou 3 (couleur) dimensions. Et il suffit d'utiliser des "slices" pour acceder à une sous partie (block) de l'image. pour info les fonction pour lire/écrire/afficher les images sont dans scipy.misc |
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : décembre 2007 Messages : 64 ![]() |
A merci, je vais regarder ça
|
|
|
00
|
|
|
#4 |
|
Membre chevronné
![]() Alexis Doctorant en informatique Inscription : juin 2009 Messages : 428 ![]() |
la PIL (python image library) est pratique notamment si tu veux dessiner dans ton image. Pour la manipulation directe de pixels, je préfère nettement l'utilisation de tableau numpy, ce qui permet de vectoriser les opération (tu evites les boucles imbriquées qui peuvent être très lente en python).
Au passage tu peux passer de l'un à l'autre grâce aux fonctions fromimage et toimage de scipy.misc. |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : décembre 2007 Messages : 64 ![]() |
Comment se fait l’installation de la partie scipy.
je ai récupéré la dernière version sur sourceforge : http://sourceforge.net/projects/scipy/files/ j'ai téléchargé le zip, mais je vois pas ou l’installer, même en le dézipant on n'obtient pas d’exécutable. Je n'ai pas trouvé la version avec laquelle il est compatible. |
|
|
00
|
|
|
#6 | ||
|
Membre chevronné
![]() Alexis Doctorant en informatique Inscription : juin 2009 Messages : 428 ![]() |
En général, il y a un fichier setup.py. Pour compiler et installer tu peux faire:
Citation:
cela nécessite que les distutils soient installés mais il me semble que c'est standard. Sinon, si tu as easy_install ou pip d'installé: Citation:
Après j'imagine que tu es sous Windows ou Mac (sous Linux il suffit de choisir les paquets à installer), et je n'ai aucune expérience de l'installation sous ces systèmes |
||
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : décembre 2007 Messages : 64 ![]() |
En fait, il y a un .exe, mai il faut aller dans les dossier et pas s’arrêter au téléchargement proposé. Par contre j'ai pas retrouvé ou il était pour metre le lien au cas ou
|
|
|
00
|
|
|
#8 | |
|
Invité de passage
![]() Inscription : juillet 2012 Messages : 2 ![]() |
Citation:
J'ai dans l'idée que c'est un reshape d'une matrice pour en faire une matrice avec une seule ligne. Est-ce exact ? |
|
|
|
00
|
|
|
#9 | |||||
|
Membre Expert
![]() Inscription : mars 2007 Messages : 851 ![]() |
Citation:
par exemple, voici 2 matrices de dimension 2x2: Code :
Code :
Cela va plus loin que les "simples" opérations matricielles; on a aussi le "broadcasting", qui permet d'appliquer des opérations à des tableaux de taille différentes (sous certaines conditions de compatibilité). Par exemple, pour multiplier tous les éléments de A par 2, on peut écrire: 2 est un scalaire, mais il peut être considéré comme une matrice avec une ligne et une colonne, qui est agrandie par duplication à la taille de A, et la division procède élément par élément (c'est le principe; c'est certainement plus optimisé que cela). Si maintenant je veux multiplier la première colonne par 2 et la seconde par 3: Ou bien la première ligne par 2 et la seconde par 3: |
|||||
|
|
00
|
|
|
#10 |
|
Membre du Club
![]() Inscription : décembre 2007 Messages : 64 ![]() |
A oui, merci pour l'explication, j'étais partie sur toute autre chose pour les notions de vectoriel.
Mais du coup si on veut voir si deux images sont identiques il suffit de faire C=A-B si C renvoie NONE les deux images le sont? Je demande ça car j'ai trouvé différente ma,ière de tester l'égalité. numpy.array_equiv ,numpy.array_equal même (A==B).all(). j'ai testé les deux premières et je me demande pourquoi il y a deux fonctions pour faire la même chose et je vois pas la différence. Est ce due a une évolution du module? |
|
|
00
|
|
|
#11 | ||||
|
Membre Expert
![]() Inscription : mars 2007 Messages : 851 ![]() |
Citation:
Citation:
array_equiv, c'est presque la même chose, mais les deux tableaux doivent seulement être compatibles du point de vue du broadcasting, ils ne doivent pas avoir exactement la même taille. (A==B).all() est équivalent à array_equiv(A,B); il construit d'abord une matrice de booléens et vérifie ensuite qu'ils sont tous True. Code :
|
||||
|
|
00
|
|
|
#12 |
|
Membre du Club
![]() Inscription : décembre 2007 Messages : 64 ![]() |
Bonjour,
Est ce que le vectoriel permet de gérer la placement d'un tableau dans un autre et de gérer un éventuelle débordement? ou alors, a se moment la, le passage par un bouclage est-il obligatoire? Un schéma sera plus parlant je pense. un tableau de remplie de zero : 0,0,0,0,0 0,0,0,0,0 0,0,0,0,0 0,0,0,0,0 0,0,0,0,0 le tableau a intégrer : 1,2,3 4,5,6 Est-il possible de placer un tableau en ciblant une position donné, ici une copie du tableau a partir de la position 2,2 0,0,0,0,0 0,0,0,0,0 0,0,1,2,3 0,0,4,5,6 0,0,0,0,0 ou de palier a un débordement du tableau : 0,0,0,0,0 0,0,0,0,0 0,0,0,0,0 0,0,0,1,2,3 0,0,0,4,5,6 pour obtenir ça : 0,0,0,0,0 0,0,0,0,0 0,0,0,0,0 0,0,0,1,2 0,0,0,4,5 Je pense que ça sera plus clair comme ça. bonne journée |
|
|
00
|
|
|
#13 | ||||||
|
Membre Expert
![]() Inscription : mars 2007 Messages : 851 ![]() |
On peut utiliser l'assignation par slices:
Code :
Si je ne me suis pas trompé: Code :
Code :
|
||||||
|
|
00
|
|
|
#14 |
|
Membre du Club
![]() Inscription : décembre 2007 Messages : 64 ![]() |
J'aurais une question sur la création de tableau.
Peut on crée un tableau avec les même canots qu'une images ciblé mais pas forcement avec les même dimensions et sans connaitre a l'avance le type de l'image (rgb, monochrome,...)? par exemple avec une image de 40*50 disons une rgb avec alpha soit a 4 canots, créer un tableau de 80*100 qui pourra recevoir les info de cette image sans déperditions des infos. j'espère avoir été claire. bonne soirée |
|
|
00
|
|
|
#15 |
|
Membre Expert
![]() Inscription : mars 2007 Messages : 851 ![]() |
Je ne suis pas sûr d'avoir compris. Tu crées ton tableau au moment où tu en as besoin, à la taille dont tu as besoin.
Et je ne comprends pas vraiment ton exemple; si tu as une image en RGBA (4 canaux), et que tu désires séparer les canaux, tu peux faire un tableau à 3 dimensions: 40x50x4. 160x100, ça fonctionne aussi, je suppose que tu penses à faire des blocs de 2x2 pour chaque pixel, mais ça me semble plus compliqué. Tu as choisi d'utiliser quoi exactement pour lire les images ? |
|
|
00
|
|
|
#16 | ||
|
Membre du Club
![]() Inscription : décembre 2007 Messages : 64 ![]() |
Pardon pour le temps de réponse, je cherchais un moyen plus clair d’expliquer mon problème. Pour le moment j'utilise le module tkFileDialog et Image pour charger mes images.
Code :
A la base, mon programme est assez simple. Il découpe un image en blocs égaux, les comparent et ne garde que ceux qui son différent, les regroupes et en fait un bitmap unique (qui n'a pas forcement la même taille que l'image) ; il crée aussi un csv pour pouvoir les replacer. J'ai lancé ça car j'avais besoin de se type d'outil pour faire de petit jeux a base de tile. Ça m'a semblé un bonne exercice pour apprendre python. J'ai découvert numpy après et j'aimerais bien continuer par la suite a l'utiliser pour m'entrainer encore en essayant de traiter des images. Mon problème se pose en deux endroits. Je crée a un moment donné un buffer dans lequel je vais coller des blocs d'une même images et aussi de la même façon lorsque je veux regrouper les bloc de l'images en un seul éléments. Comment crée un tableau de taille variable qui puisse contenir les même donnée qu'une image cible. Que par la suite je puisse traiter et sauvegarder sous le même formats que l'image de départ? J'espère avoir été plus claire. |
||
|
|
00
|
|
|
#17 | ||||
|
Membre Expert
![]() Inscription : mars 2007 Messages : 851 ![]() |
Je comprends un peu mieux. Je vois deux possibilités:
Remarque qu'avec PIL, tu peux construire ton tableau plus facilement: Code :
Code :
|
||||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com