Ipython notebook (jupyter)、opencv (cv2) 和绘图?
Ipython notebook (jupyter),opencv (cv2) and plotting?
有没有办法在 ipython notebook 上使用 opencv2 进行绘图?
我对 python 图像分析还很陌生。我决定使用笔记本工作流程,在我处理的过程中做出很好的记录,并且使用 matplotlib/pylab 来绘制事情一直很好。
我最初遇到的障碍是如何在笔记本中绘制内容。简单,只需使用魔法:
%matplotlib inline
后来,我想用交互式绘图执行操作,但在专用 window 中绘图总是会冻结。好吧,我又知道你需要使用魔法了。而不仅仅是导入模块:
%pylab
现在我开始使用 opencv。我现在又回到了同样的问题,我要么想内联绘图,要么使用专用的交互式 windows,具体取决于手头的任务。有没有类似的魔法可以使用?还有另一种方法可以使事情正常进行吗?还是我卡住了,需要从 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()
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)
每次需要在单元格中渲染图像时
对于 Python 3.5 上的 Jupyter notebook 运行,我必须将其修改为:
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()))
有没有办法在 ipython notebook 上使用 opencv2 进行绘图?
我对 python 图像分析还很陌生。我决定使用笔记本工作流程,在我处理的过程中做出很好的记录,并且使用 matplotlib/pylab 来绘制事情一直很好。
我最初遇到的障碍是如何在笔记本中绘制内容。简单,只需使用魔法:
%matplotlib inline
后来,我想用交互式绘图执行操作,但在专用 window 中绘图总是会冻结。好吧,我又知道你需要使用魔法了。而不仅仅是导入模块:
%pylab
现在我开始使用 opencv。我现在又回到了同样的问题,我要么想内联绘图,要么使用专用的交互式 windows,具体取决于手头的任务。有没有类似的魔法可以使用?还有另一种方法可以使事情正常进行吗?还是我卡住了,需要从 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()
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)
每次需要在单元格中渲染图像时
对于 Python 3.5 上的 Jupyter notebook 运行,我必须将其修改为:
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()))