Le Retournement De L'Image Python
Je suis en train d'image horizontalement.
De:
:
Mais je continue de recevoir en miroir de la moitié du chemin.
Comme Ceci:
Je suis en train d'inverser l'axe des x de l'index et je ne comprends pas pourquoi il est divisé.
def flip(picture):
height = getHeight(picture)
width = getWidth(picture)
newPicture = makeEmptyPicture(width, height)
x2 = width-1
for x in range(0, width):
y2 = 0
for y in range(0, height):
pxl = getPixel(picture, x, y)
newPxl = getPixel(picture, x2, y2)
color = getColor(pxl)
setColor(newPxl, color)
y2 = y2+1
x2 = x2-1
return picture
Le reste de mon code:
def d():
f = pickAFile()
picture = makePicture(f)
newPicture = copy(picture)
writePictureTo(newPicture, r"D:\FOLDER\newPic4.jpg")
explore(newPicture)
OriginalL'auteur Yvette Colomb | 2013-07-03
Vous devez vous connecter pour publier un commentaire.
Dans votre
flip()
fonction (comme dans toute la fonction), comme mentionné par d'autres réponses, vous revenezpicture
qui est l'image passée en paramètre de la fonction, mais est défini dans d()...C'est une question de
scope
des variables, donc je vous invite à jeter un coup d'oeil à nouveau à la discussion que nous avions ici.Ici, vous aviez deux choix (vous avez fait une fusion entre les deux):
picture
donné en paramètrenewPicture
, de la modifier, et enfin retour ilDe détails sur la 2d option :
La chose importante ici est que le
picture
variable appartient à lad()
fonction (d() est le champ d'application de celle-ci). Dans le même temps, lenewPicture
variable appartient à laflip()
fonction (flip() est son champ d'application). Donc la durée de vie de la newPicture est flip() (c'est à dire qu'il est détruit dès la fin de l'exécution de la flip() de la fonction, tandis que le retour). Et d() ne sait rien à propos de ce newPicture, à moins que vous renvoyer à d().Donc, en résumé (en supposant que nous parlons de la deuxième option):
1) Créer une fonction qui prend un
picture
en paramètre (flip())2) à l'Intérieur de flip(), créer une variable locale
newPicture
et modifier qu'un seul, tel que l'originalpicture
reste inchangé3) de Retour de la nouvelle mise à jour
newPicture
pour le parentscope
. Ici d() appelle flip(), c'est donc la portée parent. Nous devons créer un 3d variable (qui appartient à d() champ d'application), pour garder la main sur ce qui a été renvoyé par flip():{1}: Ici nous affecter la valeur retournée par flip (c'est à dire
newPicture
) à la variable de portée plus élevéefinalNewPicture
(handler)...J'espère que cela vous aide à comprendre la logique derrière cela. C'est comme poupées russes: newPicture est utilisé à l'intérieur de flip(), qui est utilisé à l'intérieur de d(), ...
EDIT :
Je veux également donner une explication sur la 1ère option...
1) Créer une fonction qui prend un
picture
en paramètre (flip())2) à l'Intérieur de flip(), de modifier directement la plus étendue
picture
variable3) de Ne pas retourner le tout à partir de flip()
Cela donnerait ceci :
{1}: Ici flip() les modifications effectuées directement sur l'image, afin que nous puissions afficher l'original de l'image modifiée directement (
original_pic
). Pas besoin d'un intermédiaire gestionnaire d'une variable.Code pour l'option 1 : (comme vous l'avez déjà travailler pour l'option 2)
Remarque : flip aurait pu être largement simplifiée comme suit :
OriginalL'auteur Gauthier Boaglio
Vous sont en train de changer les pixels dans l'image d'origine au lieu de la nouvellement créée newPicture. Aussi, vous êtes de retour à l'origine (maintenant modifié) de l'image.
Vous devriez avoir
et vous devriez vous retrouver avec
Aussi, je pense que ton code fait pivoter l'image autour de l'axe horizontal, et non pas à la verticale de vos images montrent.
OriginalL'auteur Roger Lindsjö
Comment à ce sujet? J'ai juste enlevé le
x2
/y2
des trucs qui ne me semble pas nécessaire pour moi. Sinon il doit travailler de cette façon. Je n'ai pas trouvé de vrai bug dans votre code, il suffit de retourner lapicture
au lieu denewPicture
à la fin. Mais cela ne doit pas conduire à une mise en miroir.OriginalL'auteur Alfe
Retourne un tableau 2D autour vertical, horizontal ou sur les deux axes.
Paramètres:
src
– La source de la Matrice dedst
– Le tableau de destination; de même taille et de même type que la srcflipCode
– Spécifie la façon de retourner le tableau: 0 signifie retournement autour de l'axe x positif (par exemple, 1) signifie retournement autour de l'axe des y, et négatives (par exemple, -1) signifie retournement autour de deux axes.La fonction flip retourne le tableau dans l'une des trois façons différentes (en ligne et en colonne les indices sont basés sur 0).Exemple de code:
Edit: Vous pouvez également affecter l'image réfléchie:
OriginalL'auteur mrk