tfv*_*tfv 5 python matplotlib ipython jupyter-notebook
我正在尝试使用滑块交互式更改图像的内容(例如,应用具有不同内核大小的中值运算)。
如果仅显示一张结果图像(参见注释行),这很好用,但使用子图功能时会遇到麻烦,因为该图像将不会更新。
我想念什么?
%matplotlib inline
from ipywidgets import interact, widgets
import matplotlib.pyplot as plt
import warnings
from skimage.morphology import disk
from skimage.filters import rank
from skimage.color import rgb2gray
import skimage.data
def f(Median_Size):
selem = disk(int(Median_Size))
with warnings.catch_warnings():
warnings.simplefilter("ignore")
img_median = rank.median(img_gray, selem=selem)
ax_neu.imshow(img_median, cmap="gray")
fig.canvas.draw()
#plt.imshow(img_median, cmap="gray") #This would work
#plt.show()
image = skimage.data.camera() #plt.imread("Test.png")
img_gray = rgb2gray(image)
fig = plt.figure(figsize=(6, 4))
ax_orig = fig.add_subplot(121)
ax_neu = fig.add_subplot(122)
ax_orig.imshow(img_gray, cmap="gray")
ax_neu.imshow(img_gray, cmap="gray")
interact(f, Median_Size=widgets.IntSlider(min=1,max=21,step=2,value=1))
Run Code Online (Sandbox Code Playgroud)
%matplotlib notebook您可以使用笔记本电脑后端而不是嵌入式后端。这将允许figure.canvas.draw()按预期方式通过将代码作为脚本运行来进行调用。更换线%matplotlib inline通过
%matplotlib notebook
Run Code Online (Sandbox Code Playgroud)
并重新启动内核。
displaydisplay更改后,您可以更改新更改的图形。缺点是它将创建两次输出。一种解决方法是将交互放入新的单元格中并捕获第一个单元格的输出。
%%capture
%matplotlib inline
from ipywidgets import interact, widgets
from IPython.display import display
import matplotlib.pyplot as plt
import warnings
from skimage.morphology import disk
from skimage.filters import rank
from skimage.color import rgb2gray
import skimage.data
def f(Median_Size):
selem = disk(int(Median_Size))
with warnings.catch_warnings():
warnings.simplefilter("ignore")
img_median = rank.median(img_gray, selem=selem)
ax_neu.imshow(img_median, cmap="gray")
fig.canvas.draw()
display(fig)
image = skimage.data.camera() #plt.imread("Test.png")
img_gray = rgb2gray(image)
fig = plt.figure(figsize=(6, 4))
ax_orig = fig.add_subplot(121)
ax_neu = fig.add_subplot(122)
ax_orig.imshow(img_gray, cmap="gray")
ax_neu.imshow(img_gray, cmap="gray")
Run Code Online (Sandbox Code Playgroud)
在一个新的单元格中
interact(f, Median_Size=widgets.IntSlider(min=1,max=21,step=2,value=1));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1880 次 |
| 最近记录: |