Ipython笔记本(jupyter),opencv(cv2)和绘图



有没有一种方法可以在ipython笔记本上使用和绘制opencv2

我对python图像分析相当陌生。我决定采用笔记本的工作流程,在处理过程中进行良好的记录,使用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()))

还有一个小功能被用于谷歌深度梦笔记本:

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)

每次需要在单元格中渲染图像时,

最新更新