Страницы

Поиск по вопросам

Показаны сообщения с ярлыком pil. Показать все сообщения
Показаны сообщения с ярлыком pil. Показать все сообщения

суббота, 21 декабря 2019 г.

Что делает данная операция `img[52:308,52:308]`

#python #изображения #numpy #scipy #pil


Изучаю питон, и никак не пойму, что делают строки:

img=img[52:308,52:308] 
print img.shape


В коде:  

#Fit the data into a 256*256 format and save it as a .tif file
#@Sukriti Paul

from PIL import Image
from skimage import data, io, filters
import numpy as np
from scipy import ndimage
from matplotlib import pyplot as plt
from sklearn import manifold, datasets

n=10 #number of images
for i in range (1,n+1):
    path=str(i)+'.png'
    img= io.imread('/Users/sukritipaul/Desktop/D004/test_annotate/'+path)
      #Subsection of the image
    img=img[52:308,52:308]
    print img.shape
    path=str(i)+'.tif'
    io.imsave('/Users/sukritipaul/Desk

    


Ответы

Ответ 1



Это обрезка полей изображения (cropping) - все пиксели по X и Y обрезаются таким образом - выбрать все пиксели от 52-го до 308-го по соответствующей оси и пропустить все остальные. Пример в Numpy: In [267]: import numpy as np In [268]: a = np.arange(36).reshape(6,6) In [269]: a Out[269]: array([[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23], [24, 25, 26, 27, 28, 29], [30, 31, 32, 33, 34, 35]]) обрежем по одному пикселю: In [270]: a = a[1:5, 1:5] In [271]: a Out[271]: array([[ 7, 8, 9, 10], [13, 14, 15, 16], [19, 20, 21, 22], [25, 26, 27, 28]]) Фактически это обычная операция "среза" (slicing), которая в Numpy массивах может быть одновременна выполнена по нескольким осям (измерениям). Для N-мерной матрицы срезы можно делать сразу по всем измерениям: arr[, , ..., ] Атрибут numpy.ndarray.shape возвращает размерность массива в виде кортежа: In [295]: a.shape Out[295]: (4, 4) In [296]: np.arange(48).reshape(8,6).shape Out[296]: (8, 6) In [297]: np.arange(2*3*4).reshape(2,3,4).shape Out[297]: (2, 3, 4)

Ответ 2



Вырезают фрагмент кадра размером 256x256 из, видимо, бОльшего формата, начиная с точки (52, 52)

воскресенье, 7 июля 2019 г.

Не грузится шрифт в Python Pillow

Код:
from PIL import Image, ImageColor, ImageDraw, ImageFont
spam1=Image.new("RGB", (1500, 1000), "#000096") spam2=ImageFont.load("arial.pil") spam3=ImageDraw.Draw(spam1) spam3.text((1450, 950), "IAmGM", font=spam2) spam1.save("hello.png")
Результат:
C:\Users\Admin\AppData\Local\Programs\Python\Python36-32\python.exe C:/Users/Admin/Desktop/Gosha/experiment.py Traceback (most recent call last): File "C:/Users/Admin/Desktop/Gosha/experiment.py", line 4, in spam2=ImageFont.load("arial.pil") File "C:\Users\Admin\AppData\Local\Programs\Python\Python36-32\lib\site-packages\PIL\ImageFont.py", line 229, in load f._load_pilfont(filename) File "C:\Users\Admin\AppData\Local\Programs\Python\Python36-32\lib\site-packages\PIL\ImageFont.py", line 69, in _load_pilfont with open(filename, "rb") as fp: FileNotFoundError: [Errno 2] No such file or directory: 'arial.pil'
И что делать?


Ответ

Скорее всего у вас отсутствует файл с растровым шрифтом "arial.pil" или расположен в другой директории (в этом случае укажите полный путь к файлу).
PIL начиная с версии 1.1.4 поддерживает шрифты TrueType и OpenType типов. Под Windows если указанный файл шрифта найти не удалось, ImageFont.truetype() ищет указанный файл также в директории %SystemRoot%/fonts (например: C:\Windows\fonts) :
spam2=ImageFont.truetype("arial.ttf")
из Docstring:
In [7]: ImageFont.truetype? Signature: ImageFont.truetype(font=None, size=10, index=0, encoding='', layout_engine=None) Docstring: Load a TrueType or OpenType font from a file or file-like object, and create a font object. This function loads a font object from the given file or file-like object, and creates a font object for a font of the given size.
This function requires the _imagingft service.
:param font: A filename or file-like object containing a TrueType font. Under Windows, if the file is not found in this filename, the loader also looks in Windows :file:`fonts/` directory. ...