2012-02-07 41 views
3

我想在垂直轴上翻转图片,我在python中做这个,并使用Media模块。垂直翻转图像,关联原始图片和新图片。 [python]

这样的: enter image description here

我试图找到原始和翻转之间的关系。因为我不能去python的负坐标,我决定要用图片的中间部分作为参考。

,所以我劈成两半的画面,这就是我要做的事情:

[注意我创建了一个新的空白画面和每一个(X,Y)像素复制到对应于(-x ,y),如果原始像素在中间之后。

如果中间之前,i中的像素(-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

+0

同样的问题http://stackoverflow.com/questions/9154120/flipping-a-picture-across-the在python中的垂直轴 – wim 2012-02-07 03:50:35

+0

so ................. – Wobblester 2012-02-08 02:06:59

回答

2

您的算术运算不正确。试试这个...

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

没有必要分开处理图像的两半。

这实质上否定X -CO-纵坐标,作为第一个图示出,但随后载玻片(或平移)的翻转图像通过宽度像素的权利将它放回在范围(0 - 宽度)。

+0

对不起,你是什么意思的“你的算术已经出来了。x_dash = image.width - x” – Wobblester 2012-02-07 02:53:03

+0

@Ramanujan:希望我修改后的答案对你更清楚。 – Johnsyweb 2012-02-07 03:00:47

+0

非常感谢,非常完美! – Wobblester 2012-02-07 03:12:29

25

为什么不使用Python图像库?水平翻转图像是一种方式,启动速度快得多。

from PIL import Image 
img = Image.open("AFLAC.jpg").transpose(Image.FLIP_LEFT_RIGHT) 
+0

我只能使用媒体库。我不是在寻找答案,但几乎没有提示,因为我一直在挣扎几个小时now.Thanks – Wobblester 2012-02-07 02:50:03

0

下面是一个简单的函数使用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 
从同一构件