Materi
Memotong (crop) citra di numpy adalah slicing biasa: citra[r0:r1, c0:c1] mengambil baris r0 sampai sebelum r1 dan kolom c0 sampai sebelum c1. Batas akhir tidak ikut, jadi banyak barisnya r1 − r0. Pada citra berwarna, sumbu kanal bisa ikut dipotong: citra[:, :, 0] adalah kanal merah saja.
Pillow memotong dengan Image.crop(box), dan kotaknya berurutan (kiri, atas, kanan, bawah) dalam koordinat (x, y). Handbook Pillow menjelaskan bahwa koordinat itu menunjuk sudut piksel, sehingga kanan dan bawah juga tidak ikut, persis seperti batas akhir slicing. Karena x adalah kolom dan y adalah baris, kotak (kiri, atas, kanan, bawah) sama dengan citra[atas:bawah, kiri:kanan] — urutannya tertukar.
Mencerminkan kiri-kanan adalah np.fliplr (atau np.flip dengan axis=1), atas-bawah adalah np.flipud. np.rot90 memutar 90° dan, menurut dokumentasinya, arah bawaannya berlawanan jarum jam; argumen k mengulang putaran. Image.rotate di Pillow juga memutar berlawanan jarum jam untuk sudut positif.
import numpy as np
papan = np.arange(12, dtype=np.uint8).reshape(3, 4)
print(papan[0:2, 1:3]) # [[1 2] [5 6]]
print(np.flipud(papan)[0]) # baris bawah jadi baris atas: [ 8 9 10 11]
print(np.rot90(papan).shape) # (4, 3): tinggi dan lebar bertukar