Переверните изображение по вертикали, установите связь между исходным изображением и новым. [Python] - PullRequest
3 голосов
/ 07 февраля 2012

Я пытаюсь перевернуть картинку по вертикальной оси, я делаю это на python и использую модуль Media.

вот так: enter image description here

я пытаюсь найтиотношения между оригиналом и перевернутым.поскольку я не могу перейти к отрицательным координатам в python, я решил использовать середину изображения в качестве эталона.

, поэтому я разделил изображение пополам, и это то, что я собираюсь сделатьdo:

[обратите внимание, я создаю новое пустое изображение и копирую каждый (x, y) пиксель в соответствующий (-x, y), если исходный пиксель идет после середины.

если его до середины, я копирую пиксель (-x, y) в (x, y)

enter image description here

, поэтому я закодировал его в python, и это результат.

Оригинал: enter image description here

Я получил это:

import media

pic=media.load_picture(media.choose_file())


height=media.get_height(pic)
width=media.get_width(pic)
new_pic=media.create_picture(width,height)

for pixel in pic:
   x_org=media.get_x(pixel)
   y_org=media.get_y(pixel)
   colour=media.get_color(pixel)
   new_pixel_0=media.get_pixel(new_pic,x_org+mid_width,y_org) #replace with suggested     
                                                              #answer below
   media.set_color( new_pixel_0,colour)


media.show(new_pic)

enter image description here

это не то, что я хотел, но яВ таком замешательстве я пытаюсь найти связь между исходным положением пикселя и его преобразованным (x, y) -> (- x, y).но я думаю, что это неправильно.Если бы кто-нибудь мог помочь мне с этим методом, это было бы здорово.

В конце дня я хочу такую ​​картинку:

enter image description here

http://www.misterteacher.com/alphabetgeometry/transformations.html#Flip

Ответы [ 3 ]

36 голосов
/ 07 февраля 2012

Почему бы просто не использовать Python Imaging Library?Перелистывание изображения по горизонтали - это однострочник, и его загрузка намного быстрее.

from PIL import Image
img = Image.open("AFLAC.jpg").transpose(Image.FLIP_LEFT_RIGHT)
2 голосов
/ 07 февраля 2012

Ваша арифметика неверна.Попробуйте вместо этого ...

new_pixel_0 = media.get_pixel(new_pic, width - x_org, y_org)

Нет необходимости обрабатывать две половины изображения по отдельности.

По сути, это сводит на нет x -co-ордината, как показано на вашей первой диаграмме, но затем скользит (или переводит) перевернутое изображение на ширина пикселей вправо, чтобы вернуть его в диапазон (0 - ширина ).

0 голосов
/ 04 января 2017

Вот простая функция, чтобы перевернуть изображение, используя scipy и numpy:

import numpy as np
from scipy.misc import imread, imshow
import matplotlib.pyplot as plt

def flip_image(file_name):
    img = imread(file_name)
    flipped_img = np.ndarray((img.shape), dtype='uint8')
    flipped_img[:,:,0] = np.fliplr(img[:,:,0])
    flipped_img[:,:,1] = np.fliplr(img[:,:,1])
    flipped_img[:,:,2] = np.fliplr(img[:,:,2])
    plt.imshow(flipped_img)
    return flipped_img
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...