Преобразование контура (MatplotLib или OpenCV) в изображение того же размера, что и оригинал
У меня есть этот контур, полученный с MatplotLib:
теперь я хочу использовать его как обычный образ Python (PIL или array), потому что я хочу применить к нему маску (полученную с 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=[])
... после использования функции контура, и это должно быть перед использованием функции контура. Имейте это в виду!
1 ответов
Я однажды опубликовал вопрос, как вы могли бы построить изображение .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)