python opencv エラー　画像処理　index

[code]

    import cv2
    
    file="face_01.jpg"
    img=cv2.imread(file)
    imgray=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    h,w=imgray.shape
    print(imgray[60][39])
    
[/code]

これを実行すると`IndexError: index 60 is out of bounds for axis 0 with size
40`とエラーが出ます。imgrayの座標[60][39]が白か黒かを調べたいのでこのような実行をしました。ちなみにh=40,w=67です。解決策を教えてほしいです。




OpenCVでは、配列(ndarray)の添字の順番は(x,y(,c))ではなく、(y,x(,c))になっています。  
これは恐らく、メモリの連続性を考えた時に、普通画像はx方向にメモリを連続に確保するためにyが先になっています。  
ご質問のコードは添字のxとyが逆になっているために、画像の範囲外へのアクセスになり、エラーになっているので、添字の順番を変えて、

[code]

    print(imgray[39][60])
    
[/code]

とすればいいかと。

参考文献:  
<https://stackoverflow.com/questions/19098104/python-opencv2-cv2-wrapper-get-
image-size>  
numpyはC言語と同じ順番でメモリにデータが格納されているので、array[i,j]とした時には添字jについてメモリは連続になります（Fortranとかだと逆なので注意）  
<http://kaisk.hatenadiary.com/entry/2015/02/19/224531>

