Miroir de l'Image en Diagonale en Python
Je vais prendre une programmation de classe sur le langage python, et nous travaillons sur la mise en miroir des images par la définition d'un miroir, puis la copie d'un pixel à partir de l'un côté à l'autre à l'aide de boucles for imbriquées. Par exemple, la mise en miroir une image à la verticale utilisez le code suivant:
def mirrorVertical(source):
mirrorPoint = getWidth(source) / 2
width = getWidth(source)
for y in range(0,getHeight(source)):
for x in range(0,mirrorPoint):
leftPixel = getPixel(source,x,y)
rightPixel = getPixel(source,width - x - 1,y)
color = getColor(leftPixel)
setColor(rightPixel,color)
Je suis actuellement en train de travailler sur une question d'attribution de nous demander de miroir une image en diagonale, de sorte que le côté supérieur gauche obtient refléter sur le côté en bas à droite. Chaque exemple et la réponse que j'ai trouvé à ce jour ne fonctionne que pour les images carrées, et j'ai besoin d'être en mesure de l'appliquer à n'importe quelle image, de préférence par la définition d'une diagonale miroir point. J'ai essayé de définir le miroir de point à l'aide d'un y = mx + b style équation, mais je ne peux pas comprendre comment le dire à Python pour en faire une ligne. Aucune aide n'est pas spécifique à la place des images serait appréciée!
Remarque: depuis que je suis tout nouveau ici, je ne peux pas poster d'images, mais la diagonale miroir point de courir à partir du bas à gauche vers le haut à droite. L'image en haut à gauche du triangle seront reflétées dans le bas à droite.
OriginalL'auteur user2054546 | 2013-02-08
Vous devez vous connecter pour publier un commentaire.
Vous pouvez échanger en haut à gauche à en bas à droite de non-matrice carrée comme ceci:
Cela fonctionne pour la mise en miroir le long de la diagonale. Vous semble impliquer que vous pouvez mettre en miroir le long de certaines emplacement arbitraire. Dans ce cas, vous devrez décider de la manière de remplir les pixels qui n'ont pas de pixel correspondant sur le côté opposé de la ligne de miroir.
Vous mentionner que vous êtes un travail, alors vous êtes probablement nécessaire pour faire les boucles explicitement, mais notez que si vous mettez vos données dans un tableau numpy, vous pouvez facilement (et plus efficace) d'atteindre ce que vous voulez avec une combinaison des fonctions de numpy
fliplr
,flipud
, ettranspose
.Note également que, dans votre exemple de code (mise en miroir de gauche/droite), de la copie de la gauche à la droite, mais pas vice-versa, de sorte que vous ne sont pas réellement de mise en miroir de l'image.
OriginalL'auteur bogatron
Juste pour partager un mode de mise en miroir de la diagonale, en bas à gauche à en haut à droite :
L'étudiant est chargé d'adapter, s'il a besoin d'un miroir à partir de "en haut à droite vers le bas-gauche", ou utiliser l'inverse de la diagonale.
Remarque : Il se comporte comme si nous étions un miroir vertical pour chaque ligne de pixels de manière indépendante, le long de l'axe vertical passant par le
mirrorPt
point.De sortie (Peinture par Antoni Tapies):
...................................
Suivantes sont expérimentales et juste pour le fun...
............................................................................................................
..............
Ok, je vais vous écrire en français alors !
Il le devrait. Êtes-vous sûr que vous êtes en utilisant exactement "au carré" des images en entrée? Quelle est l'erreur que vous obtenez? J'ai ajouté une case à rejeter non au carré des photos de ma réponse. Des acclamations.
Si vous êtes toujours intéressé par le retournement et/ou la mise en miroir des images, j'ai amélioré ma réponse ci-dessus avec une plus complète de l'algorithme, permettant à tous les 4 combinaison lors de la mise en miroir de la diagonale. Des acclamations.
OriginalL'auteur Gauthier Boaglio
Je suppose que vous voulez miroir selon une ligne de 45°, ne pas le rectangle de diagonale.
Vous devez créer une nouvelle image, c'est la largeur est la hauteur de l'original, et c'est la hauteur, c'est la largeur de l'original.
Si l'origine de votre système de coordonnées est en bas à gauche, copiez le point (x, y) à l'origine, dans l' (y, x) position dans la nouvelle image. Si c'est un autre coin, vous avez à penser un peu plus 😉
OriginalL'auteur MatthieuW