Предположим, у меня есть несколько изображений с шириной x и высотой y. Мне нужно обрезать центральную часть изображения до ширины cropx и высоты. Предположим, что cropx и урожайность - положительные целые числа, отличные от нуля, и меньше соответствующего размера изображения. Каков наилучший способ применения среза для выходного изображения?часть центра обрезки изображения numpy
7
A
ответ
11
Что-то вдоль этих линий -
def crop_center(img,cropx,cropy):
y,x = img.shape
startx = x//2-(cropx//2)
starty = y//2-(cropy//2)
return img[starty:starty+cropy,startx:startx+cropx]
Пример запуска -
In [45]: img
Out[45]:
array([[88, 93, 42, 25, 36, 14, 59, 46, 77, 13, 52, 58],
[43, 47, 40, 48, 23, 74, 12, 33, 58, 93, 87, 87],
[54, 75, 79, 21, 15, 44, 51, 68, 28, 94, 78, 48],
[57, 46, 14, 98, 43, 76, 86, 56, 86, 88, 96, 49],
[52, 83, 13, 18, 40, 33, 11, 87, 38, 74, 23, 88],
[81, 28, 86, 89, 16, 28, 66, 67, 80, 23, 95, 98],
[46, 30, 18, 31, 73, 15, 90, 77, 71, 57, 61, 78],
[33, 58, 20, 11, 80, 25, 96, 80, 27, 40, 66, 92],
[13, 59, 77, 53, 91, 16, 47, 79, 33, 78, 25, 66],
[22, 80, 40, 24, 17, 85, 20, 70, 81, 68, 50, 80]])
In [46]: crop_center(img,4,6)
Out[46]:
array([[15, 44, 51, 68],
[43, 76, 86, 56],
[40, 33, 11, 87],
[16, 28, 66, 67],
[73, 15, 90, 77],
[80, 25, 96, 80]])
1
Спасибо, Divakar.
Ваш ответ заставил меня двигаться в правильном направлении. Я придумал это, используя отрицательные смещения ломтика считать «с конца»:
def cropimread(crop, xcrop, ycrop, fn):
"Function to crop center of an image file"
img_pre= msc.imread(fn)
if crop:
ysize, xsize, chan = img_pre.shape
xoff = (xsize - xcrop) // 2
yoff = (ysize - ycrop) // 2
img= img_pre[yoff:-yoff,xoff:-xoff]
else:
img= img_pre
return img
Несколько вещей, которые я не уверен.
- Будет ли это работать с нечетными размерами изображения и/или значениями культур?
- Будут ли выходные изображения одинакового размера?
Cheers, Герт
Вы можете использовать '' // вместо '/', чтобы избежать их числа с плавающей пт, поскольку они могут не работать для индексирования, по крайней мере, я думаю, с Python 3. х версий. – Divakar