web-dev-qa-db-ja.com

skimageで画像をトリミングしますか?

Skimageを使用して特定の画像の長方形をトリミングしています。長方形の座標として(x1、y1、x2、y2)があり、画像を読み込んでいます。

 image = skimage.io.imread(filename)
 cropped = image(x1,y1,x2,y2)

ただし、これは画像をトリミングする間違った方法です。skimageで正しい方法でそれを行うにはどうすればよいですか。

6
user824624

これは単純な構文エラーのようです。

Matlabでは、_'parentheses'_を使用してピクセルまたは画像領域を抽出できます。ただし、Pythonおよびnumpy.ndarrayでは、角かっこを使用して画像の領域をスライスする必要があります。このコードでは、長方形を切り取るのに間違った方法を使用しています。

カットする正しい方法は、:演算子を使用することです。

したがって、

from skimage import io
image = io.imread(filename)
cropped = image[x1:x2,y1:y2]
19

次のコードに示すように、skimage.util.crop()関数も使用できます。

import numpy as np
from skimage.io import imread
from skimage.util import crop
import matplotlib.pylab as plt

A = imread('lena.jpg')

# crop_width{sequence, int}: Number of values to remove from the edges of each axis. 
# ((before_1, after_1), … (before_N, after_N)) specifies unique crop widths at the 
# start and end of each axis. ((before, after),) specifies a fixed start and end 
# crop for every axis. (n,) or n for integer n is a shortcut for before = after = n 
# for all axes.
B = crop(A, ((50, 100), (50, 50), (0,0)), copy=False)

print(A.shape, B.shape)
# (220, 220, 3) (70, 120, 3)

plt.figure(figsize=(20,10))
plt.subplot(121), plt.imshow(A), plt.axis('off') 
plt.subplot(122), plt.imshow(B), plt.axis('off') 
plt.show()

次の出力(元の画像とトリミングされた画像):

enter image description here

2
Sandipan Dey

pILライブラリのImageモジュールを続行できます

from PIL import Image
im = Image.open("image.png")
im = im.crop((0, 50, 777, 686))
im.show()
0
Venkatesan