将轮廓(MatplotLib或OpenCV)转换为与原始尺寸相同的图像

时间:2012-11-29 10:07:24

标签: python image-processing opencv matplotlib contour

我用MatplotLib获得了这个轮廓:

Contour

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

问题在于,使用MatplotLib,调整轮廓图像的大小,并添加边距(对于轴,即使我不绘制轴),所以我从MatplotLib的图中获得的图像不适合用OpenCV获得的面具。

我尝试使用OpenCV获得相同的轮廓,但是我没有使用cv2.FindContours和cv2.DrawContours函数获得任何结果(如果你知道如何这样做,请告诉我......在这previous topic你可以看到原始图像和我想要的轮廓

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

我希望你能帮助我至少使用其中一种解决方案!

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

Rutger Kassies的回答是正确的。它不适合我,因为我写了这一行...

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

...使用轮廓功能后,必须在使用轮廓功能之前。牢记这一点!

1 个答案:

答案 0 :(得分: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)