我正在使用skimage来裁剪给定图像中的矩形,现在我将(x1,y1,x2,y2)作为矩形坐标,然后我加载了图像
image = skimage.io.imread(filename)
cropped = image(x1,y1,x2,y2)
然而,这是裁剪图像的错误方法,我将如何在skimage中以正确的方式进行拍摄
答案 0 :(得分:15)
这似乎是语法上的一个简单错误。
好吧,在Matlab中,你可以使用_'parentheses'_
来提取像素或图像区域。但是在Python和numpy.ndarray
中,您应该使用括号来切割图像的某个区域,此外,在此代码中,您使用错误的方法来剪切矩形。
正确的裁剪方法是使用:
运算符。
因此,
from skimage import io
image = io.imread(filename)
cropped = image[x1:x2,y1:y2]
答案 1 :(得分:0)
您可以继续使用PIL库的Image模块
from PIL import Image
im = Image.open("image.png")
im = im.crop((0, 50, 777, 686))
im.show()
答案 2 :(得分:0)
一个人也可以使用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()
具有以下输出(带有原始和裁剪的图像):
答案 3 :(得分:0)
您可以使用skimage裁剪图像,只需将图像数组切片如下:
image = image_name[y1:y2, x1:x2]
示例代码:
from skimage import io
import matplotlib.pyplot as plt
image = io.imread(image_path)
cropped_image = image[y1:y2, x1:x2]
plt.imshow(cropped_image)