7

MatplotLibでこの輪郭を取得しました:

輪郭

ここで、マスク(OpenCVで取得)を適用するため、通常のPythonイメージ(PILまたは配列)として使用します。

問題は、MatplotLibを使用すると、輪郭のある画像のサイズが変更され、マージンが追加されるため(軸を描画しなくても)、MatplotLibの図から取得した画像が作成されないことです。 OpenCVで取得したマスクに適合します。

OpenCVで同じ輪郭を取得しようとしましたが、cv2.FindContours関数とcv2.DrawContours関数で結果が得られません(この方法を知っている場合は、教えてください...この前のトピックで元の画像と私が望む輪郭を見ることができます)

別の可能な解決策は、MatplotLibで取得した輪郭を、元の画像と同じサイズで余白のない画像(PILまたは配列)に変換することです。

少なくともこれらの解決策の1つで私を助けてくれることを願っています!

- - - - - - - - - - - - - - 編集 - - - - - - - - - - - -----

RutgerKassiesの答えは正しいです。私がこの行を書いたので、それは私のために働いていませんでした...

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 に答える