web-dev-qa-db-ja.com

Ipythonノートブック(jupyter)、opencv(cv2)およびプロット?

ipythonノートブックでopencv2を使用してプロットする方法はありますか?

私はpython画像解析を初めて使用します。処理中にノートブックのワークフローを使用してNiceレコードを作成することにしました。matplotlib/ pylabを使用して物事をプロットすることは非常にうまくいきました。

最初のハードルは、ノートブック内で物事をプロットする方法でした。簡単、魔法を使うだけ:

%matplotlib inline

後で、インタラクティブプロットで操作を実行したかったのですが、専用ウィンドウでのプロットは常にフリーズしていました。結構、魔法を使う必要があることを改めて学びました。モジュールを単にインポートする代わりに:

%pylab

今、私はopencvでの作業に移りました。私は今、同じ問題に戻っています。そこでは、インラインのプロットを行うか、手元のタスクに応じて専用の対話型ウィンドウを使用します。使用する同様の魔法はありますか?物事を機能させる別の方法はありますか?それとも、行き詰まっていて、IDLEからプログラムの実行に戻る必要がありますか?

サイドノートとして:opencvが正しくインストールされたことを知っています。まず、cv2モジュールのインストールまたはインポートでエラーが発生しなかったためです。第二に、cv2を使用して画像を読み込んでから、別の画像でプロットできるためです。

23
Fire

これは私の空のテンプレートです:

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()

オンラインサンプルを参照

29
themadmax

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()))
3

また、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)

セルに画像をレンダリングする必要があるたびに

2
snoob dogg