ipythonノートブックでopencv2を使用してプロットする方法はありますか?
私はpython画像解析を初めて使用します。処理中にノートブックのワークフローを使用してNiceレコードを作成することにしました。matplotlib/ pylabを使用して物事をプロットすることは非常にうまくいきました。
最初のハードルは、ノートブック内で物事をプロットする方法でした。簡単、魔法を使うだけ:
%matplotlib inline
後で、インタラクティブプロットで操作を実行したかったのですが、専用ウィンドウでのプロットは常にフリーズしていました。結構、魔法を使う必要があることを改めて学びました。モジュールを単にインポートする代わりに:
%pylab
今、私はopencvでの作業に移りました。私は今、同じ問題に戻っています。そこでは、インラインのプロットを行うか、手元のタスクに応じて専用の対話型ウィンドウを使用します。使用する同様の魔法はありますか?物事を機能させる別の方法はありますか?それとも、行き詰まっていて、IDLEからプログラムの実行に戻る必要がありますか?
サイドノートとして:opencvが正しくインストールされたことを知っています。まず、cv2モジュールのインストールまたはインポートでエラーが発生しなかったためです。第二に、cv2を使用して画像を読み込んでから、別の画像でプロットできるためです。
これは私の空のテンプレートです:
import cv2
import matplotlib.pyplot as plt
import numpy as np
import sys
%matplotlib inline
im = cv2.imread('IMG_FILENAME',0)
h,w = im.shape[:2]
print(im.shape)
plt.imshow(im,cmap='gray')
plt.show()
Python 3.5で実行されているJupyterノートブックの場合、これを次のように変更する必要がありました。
import io
import cv2
import numpy as np
from IPython.display import clear_output, Image, display
import PIL.Image
def showarray(a, fmt='jpeg'):
a = np.uint8(np.clip(a, 0, 255))
f = io.BytesIO()
PIL.Image.fromarray(a).save(f, fmt)
display(Image(data=f.getvalue()))
また、Google Deepdream Notebookで使用された小さな機能もあります。
import cv2
import numpy as np
from IPython.display import clear_output, Image, display
from cStringIO import StringIO
import PIL.Image
def showarray(a, fmt='jpeg'):
a = np.uint8(np.clip(a, 0, 255))
f = StringIO()
PIL.Image.fromarray(a).save(f, fmt)
display(Image(data=f.getvalue()))
その後、次のことができます。
img = cv2.imread("an_image.jpg")
そして単純に:
showarray(img)
セルに画像をレンダリングする必要があるたびに