
[code]

    # coding: utf-8
    
    import Image as img
    import numpy as np
    import matplotlib.pyplot as plt
    
    img = np.array(img.open("a.png"))
    
    width  = img.shape[0]
    height = img.shape[1]
    
    for i in range(height + 1) :
        for j in range(width + 1) :
            img[i][j] = img[i][width] - img[i][j]
    
    plt.imshow(img)
    plt.show()
    
[/code]

python初心者なのですが画像を左右反転させるコードを書いたのですが,

img[i][j] = img[i][width] - img[i][j]  
IndexError: index 512 is out of bounds for axis 0 with size 512

というエラーが出てしまいます.  
ちなみに, 画像はカラー画像で width = height = 512 です.  
エラーが言っていることは何となく分かるのですが, どう修正すれば良いのでしょうか?


CC BY-SA 3.0
2016-01-20T12:40:02.383
21132
2017-01-25T04:11:46.697
10019
question
python
pythonのrange関数について


`height`「高さ」と`width`「幅」を逆に初期値を与えたと思います。以下を試してください。

[code]

    import numpy as np
    import matplotlib.pyplot as plt
    
    img = np.array(img.open("a.png"))
    plt.imshow(img)
    height  = img.shape[0]
    width = img.shape[1]
    
    for i in range(height):
        for j in range(width):
            img[i][:] = img[i][::-1]
    
    plt.imshow(img)
    plt.show()
    
[/code]

一般的にアレイ`a` を[逆の順序](https://docs.scipy.org/doc/numpy-
dev/user/quickstart.html#indexing-slicing-and-iterating)にしたい時は`a[ :
:-1]`が早いと思います。


CC BY-SA 3.0
2016-12-10T19:49:35.320
31076
2016-12-10T21:20:02.187
2016-12-10T21:20:02.187
19040
19040
21132
answer