当前位置: 首页 > 面试题库 >

使用NumPy(或SciPy)裁剪出部分图像

邵宏达
2023-03-14
问题内容

使用’numpy’或’scipy’(我没有使用’OpenCV’)我试图裁剪一个
图像中的区域。
有没有类似于“cropPolygon(image,vertices=[(1,2),(3,4)…])”的东西
numpy还是SciPy`?


问题答案:

你在用matplotlib吗?我以前采用的一种方法是使用.contains\u points()方法
matplotlib.path.path路径构造一个布尔掩码,然后
用于索引到图像数组中。
例如:

import numpy as np
from matplotlib.path import Path
from scipy.misc import lena

img = lena()

# vertices of the cropping polygon
xc = np.array([219.5, 284.8, 340.8, 363.5, 342.2, 308.8, 236.8, 214.2])
yc = np.array([284.8, 220.8, 203.5, 252.8, 328.8, 386.2, 382.2, 328.8])
xycrop = np.vstack((xc, yc)).T

# xy coordinates for each pixel in the image
nr, nc = img.shape
ygrid, xgrid = np.mgrid[:nr, :nc]
xypix = np.vstack((xgrid.ravel(), ygrid.ravel())).T

# construct a Path from the vertices
pth = Path(xycrop, closed=False)

# test which pixels fall within the path
mask = pth.contains_points(xypix)

# reshape to the same size as the image
mask = mask.reshape(img.shape)

# create a masked array
masked = np.ma.masked_array(img, ~mask)

# if you want to get rid of the blank space above and below the cropped
# region, use the min and max x, y values of the cropping polygon:

xmin, xmax = int(xc.min()), int(np.ceil(xc.max()))
ymin, ymax = int(yc.min()), int(np.ceil(yc.max()))
trimmed = masked[ymin:ymax, xmin:xmax]

Plotting:

from matplotlib import pyplot as plt

fig, ax = plt.subplots(2, 2)

ax[0,0].imshow(img, cmap=plt.cm.gray)
ax[0,0].set_title('original')
ax[0,1].imshow(mask, cmap=plt.cm.gray)
ax[0,1].set_title('mask')
ax[1,0].imshow(masked, cmap=plt.cm.gray)
ax[1,0].set_title('masked original')
ax[1,1].imshow(trimmed, cmap=plt.cm.gray)
ax[1,1].set_title('trimmed original')

plt.show()


 类似资料:
  • 问题内容: 假设我有一些宽度x和高度y的图像。我必须将图像的中心部分裁剪为宽裁剪和高裁剪。假设cropx和cropty是正非零整数,并且小于各自的图像大小。对输出图像应用切片的最佳方法是什么? 问题答案: 遵循这些原则- 样品运行-

  • 我试图在一个PDF文件,其中有一个矢量图形的中心,但它有文字和其他标志周围的页面,我不需要。我只需要提取文件的向量部分,到目前为止,我所能做的就是创建一个CropBox,然后将CropBox转换为位图。 这导致只提取页面中心的图形,但缺点是它是位图。一旦我使用cropbox创建了PDF,如果我在窗口中打开它,它显示了我所需要的,但是当我将其导入CorelDraw或Adobe Illustrator

  • 我试图在从图库中选择图像后使用intent来裁剪图像。以下是我的代码片段 在这里,我使用PICK_IMAGE_REQUEST意图句柄调用上面的代码段 由于我在裁剪后使用了相同的意图,即PICK_IMAGE_REQUEST,可能会出现什么问题

  • 问题内容: 我有这个HTML: 使用此CSS: 我正在应用的背景图像是200x100像素,但我只想显示200x50像素的背景图像的裁剪部分。 似乎不是正确的CSS属性。我该怎么用呢? 不应使用,因为我在Sprite上下文中使用了上述CSS,在该Sprite上下文中,我要显示的图像部分小于定义CSS的元素。 问题答案: 您可以将图形放置在具有其自身尺寸上下文的伪元素中: 浏览器支持很好,但是如果需要

  • 我有一个小问题,我正在努力寻找一个解决办法。长话短说,我必须用itext从pdf中删除每个页面的顶部。我用成功地做到了这一点,但问题是,这会通过删除顶部使页面变小。 有人能帮我实现这一点,使页面大小保持不变。我的想法是用一个白色矩形覆盖顶部页面,但经过多次尝试,我没有做到这一点。 这是我用来裁剪页面的当前代码。

  • 问题内容: 下面的代码可以很好地裁剪图像,这是我想要的,但是对于较大的图像,它也可以正常工作。有什么办法可以缩小图像吗? 想法是,在裁剪之前,我将能够使每个图像的大小大致相同,以便每次都能获得良好的效果 代码是 问题答案: 如果要生成缩略图,则必须首先使用调整图像大小。您必须调整图像的大小,以使图像较小侧的尺寸等于拇指的相应侧。 例如,如果源图像为1280x800px,拇指为200x150px,则