7

我用 MatplotLib 获得了这个轮廓:

轮廓

现在,我想将它用作普通的 Python 图像(PIL 或数组),因为我想将它应用为掩码(通过 OpenCV 获得)。

问题是使用MatplotLib,带有轮廓的图像被调整大小,并添加了一个边距(对于轴,即使我不画轴),所以我从MatplotLib的图中获得的图像没有适合使用 OpenCV 获得的掩码。

我试图用 OpenCV 获得相同的轮廓,但我没有使用 cv2.FindContours 和 cv2.DrawContours 函数获得任何结果(如果你知道如何做到这一点,请告诉我......在上一个主题中你可以看到我想要的原始图像和轮廓)

另一种可能的解决方案是将使用 MatplotLib 获得的轮廓转换为与原始大小相同且没有边距的图像(PIL 或数组)。

我希望您至少可以通过其中一种解决方案来帮助我!

- - - - - - - - - - - - - - 编辑 - - - - - - - - - - - -----

Rutger Kassies 的回答是正确的。它对我不起作用,因为我写了这行......

ax = plt.axes([0, 0, 1, 1], frame_on=False, xticks=[], yticks=[])

...在使用轮廓函数之后,并且必须在使用轮廓函数之前。记在脑子里!

4

1 回答 1

4

我曾经发布过如何使用 .imshow 绘制图像并再次保存它以使其等于输入图像的问题。我得到的答复可能对您的情况有所帮助,这就是您可以保存具有相同尺寸的轮廓图像的方法:

from PIL import Image

im = np.array(Image.open('input_image.jpg').convert('L'))

xpixels = im.shape[1]
ypixels = im.shape[0]

dpi = 72
scalefactor = 1

xinch = xpixels * scalefactor / dpi
yinch = ypixels * scalefactor / dpi

fig = plt.figure(figsize=(xinch,yinch))

ax = plt.axes([0, 0, 1, 1], frame_on=False, xticks=[], yticks=[])

contour(im, levels=[240], colors='black', origin='image')

plt.savefig('same_size.png', dpi=dpi)
于 2012-11-29T10:42:38.597 回答