Python image miroir
J'ai été faire une image en miroir dans les axes horizontal et vertical. Maintenant, je vais faire de la diagonale.
J'avais fait l'hori et verti largeur de deux boucles for qui, dans le hori scénario boucle par tous les pixels de la hauteur et seulement la moitié des pixels dans la largeur. Puis il obtient la couleur d'un pixel et définie de la même couleur du pixel sur l'autre côté. En allant de la getWidth(pic)
au centre.
Ensuite, j'ai mon miroir au milieu de la photo. Comment faire de la diagonale de la sorte?
Edit:
img_src = makePicture(pickAFile())
W = getWidth(img_src)
H = getHeight(img_src)
for x in range(W):
for y in range(H):
p = getPixel(img_src, x, y)
colorInSrc = getColor( getPixel(img_src, x, y) )
destPixel = getPixel(img_src, H-y-1, W-x-1)
setColor(destPixel, colorInSrc)
- Ce ne semble pas être une très python question, mais juste de l'algorithme sur la façon de manipuler une matrice. Il n'y rien de particulier à propos de la langue du "comment faire". La solution optimale/algorithme est de la croix de la langue
- Je ne suis pas sûr de ce que la méthode getPixel et setColor faire, mais il semble que vous êtes en train de modifier de la même image. Dans mon exemple, vous avez besoin de créer une nouvelle image avec la largeur et la hauteur inversé (c'est à dire la hauteur de l'image d'origine deviendra la largeur de l'image) et de définir les pixels sur la nouvelle image. Si vous voulez garder la même largeur et la hauteur, et de modifier la même image, puis aller avec ce que Sven Hecht dit et que vous utilisez le code existant pour retourner à la verticale puis à l'horizontale sur la même image.
Vous devez vous connecter pour publier un commentaire.
Si j'ai bien compris ce que vous avez besoin est de "renverser" l'image par une diagonale. Depuis il y en a deux, je vais supposer que tu veux dire celui qui va en bas à gauche à en haut à droite.
Dans le but de renverser par cette diagonale vous avez besoin pour transformer chaque ligne de la source dans les colonnes de la destination. La partie gauche de la ligne devenir la partie inférieure de la nouvelle colonnes. Aussi la ligne supérieure deviendra la colonne la plus à droite. Vous aurez besoin pour ce faire pixel par pixel sur l'ensemble de l'image. Aussi garder à l'esprit que la largeur et la hauteur de l'image seront inversés.
Modifier: Un petit exemple. Disons que vous commencez avec une image de 5 pixels de large et de 3 pixels de haut (5x3). Vous aurez besoin de créer une nouvelle image vide de 3 pixels de large et de 5 pixels de haut.
Si vous commencez pixel numérotation à partir du coin en haut à gauche avec (0,0), puis ce pixel sera à la fin au (2,4) dans la nouvelle image, en pixels (1,0) prendra fin à (2,3) et ainsi de suite.
Si votre original largeur et la hauteur sont W et H, alors vous devriez utiliser quelque chose comme ceci:
Cela devrait fonctionner, mais n'est pas testé.
À l'aide de PIL (Python Imaging Library) c'est une tâche relativement simple. Notez cependant, que l'image de sortie est square-donc pas de la même taille que l'image d'origine.
Voici le code:
Ce n'est pas vraiment un Python question, est-il?
La solution la plus simple serait de premier miroir horizontal puis vertical.
Une autre serait de basculer pixel lignes avec les colonnes.
Ou faire votre algorithme mais passer les pixels de haut-gauche vers le bas à droite...
Voici comment faire un miroir en diagonale dans JES; Il ne fonctionne que pour une image carrée si: