我正在尝试裁剪图像。我已经在我想要裁剪的零件周围创建了一个多边形。
xs = []
ys = []
for props in measurements:
minr, minc, maxr, maxc = props.bbox
by = (minc , maxc, maxc, minc, minc)
bx = (minr, minr, maxr, maxr, minr)
xs.append(bx)
ys.append(by)
r = xs[0]
c = ys[0]
rr,cc = draw.polygon_perimeter(r ,c)
img_blob[rr,cc] = 1
cool = img_blob[rr,cc]
[rows, columns] = np.where(cool)
row1 = min(rows)
row2 = max(rows)
col1 = min(columns)
col2 = max(columns)
cropped = img_blob[row1 : row2, col1:col2]
plt.imshow(cropped)使用上面的代码,我将获得
ValueError to be 'not enough values to unpack (expected 2, got 1)'如何才能仅获取polygon_perimeter所在的位置,以便根据该位置进行裁剪?
我不能使用cv2或PIL,只能使用skimage或numpy
发布于 2020-07-20 11:04:22
cool是一个只包含1的一维数组,因为您可以使用cool = img_blob[rr, cc]从img_blog中提取它们。使用坐标列表进行索引称为fancy indexing,它总是得到一个与索引形状相同的数组,在本例中是1D。
所以,当你执行np.where(cool)时,你会得到一个长度为1,坐标为1d的元组,但是表达式rows, cols = np.where(cool)需要两个值,所以它会报错。(在完整的回溯中,查看引发ValueError的行总是很好的。)
取而代之的是,使用rows, columns = np.where(img_blob),一切都会正常工作的!
https://stackoverflow.com/questions/62986238
复制相似问题