Chcę przyciąć obraz w taki sposób, usuwając pierwsze 30 wierszy i ostatnie 30 wierszy z danego obrazu. Szukałem, ale nie znalazłem dokładnego rozwiązania. Czy ktoś ma jakieś sugestie?
python
python-imaging-library
crop
Taj Koyal
źródło
źródło
Parameters: box – The crop rectangle, as a (left, upper, right, lower)-tuple.
W tym celu musisz zaimportować PIL (Pillow). Załóżmy, że masz obraz o rozmiarze 1200, 1600. Przycinamy obraz z 400, 400 do 800, 800
from PIL import Image img = Image.open("ImageName.jpg") area = (400, 400, 800, 800) cropped_img = img.crop(area) cropped_img.show()
źródło
(lewy, górny, prawy, dolny) oznacza dwa punkty,
w przypadku obrazu o rozdzielczości 800x600 pikseli lewy górny punkt obrazu to (0, 0), a prawy dolny punkt to (800, 600).
Tak więc, aby przeciąć obraz na pół:
from PIL import Image img = Image.open("ImageName.jpg") img_left_area = (0, 0, 400, 600) img_right_area = (400, 0, 800, 600) img_left = img.crop(img_left_area) img_right = img.crop(img_right_area) img_left.show() img_right.show()
System współrzędnych
Biblioteka Python Imaging Library korzysta z kartezjańskiego układu współrzędnych pikseli, z (0,0) w lewym górnym rogu. Zwróć uwagę, że współrzędne odnoszą się do domniemanych rogów pikseli; środek piksela adresowany jako (0, 0) w rzeczywistości leży na (0,5, 0,5).
Współrzędne są zwykle przekazywane do biblioteki w postaci 2 krotek (x, y). Prostokąty są reprezentowane jako 4 krotki, z lewym górnym rogiem podanym jako pierwszy. Na przykład prostokąt obejmujący cały obraz o wymiarach 800x600 pikseli jest zapisywany jako (0, 0, 800, 600).
źródło
Łatwiejszym sposobem jest użycie funkcji crop from ImageOps . Możesz podać liczbę pikseli, które chcesz przyciąć z każdej strony.
from PIL import ImageOps border = (0, 30, 0, 30) # left, up, right, bottom ImageOps.crop(img, border)
źródło