Observação
Clique aqui para baixar o código de exemplo completo
Limiar uma imagem com RangeSlider #
Usando o widget RangeSlider para controlar o limite de uma imagem.
O widget RangeSlider pode ser usado de forma semelhante ao widgets.Slider
widget. A principal diferença é que o val
atributo RangeSlider é uma tupla de floats em vez de um único float.(lower val, upper val)
Consulte Slider para obter um exemplo de como usar um Slider
para controlar um único flutuador.
Consulte Ajustando os controles deslizantes a valores discretos para obter um exemplo de Slider
ajuste a valores discretos.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import RangeSlider
# generate a fake image
np.random.seed(19680801)
N = 128
img = np.random.randn(N, N)
fig, axs = plt.subplots(1, 2, figsize=(10, 5))
fig.subplots_adjust(bottom=0.25)
im = axs[0].imshow(img)
axs[1].hist(img.flatten(), bins='auto')
axs[1].set_title('Histogram of pixel intensities')
# Create the RangeSlider
slider_ax = fig.add_axes([0.20, 0.1, 0.60, 0.03])
slider = RangeSlider(slider_ax, "Threshold", img.min(), img.max())
# Create the Vertical lines on the histogram
lower_limit_line = axs[1].axvline(slider.val[0], color='k')
upper_limit_line = axs[1].axvline(slider.val[1], color='k')
def update(val):
# The val passed to a callback by the RangeSlider will
# be a tuple of (min, max)
# Update the image's colormap
im.norm.vmin = val[0]
im.norm.vmax = val[1]
# Update the position of the vertical lines
lower_limit_line.set_xdata([val[0], val[0]])
upper_limit_line.set_xdata([val[1], val[1]])
# Redraw the figure to ensure it updates
fig.canvas.draw_idle()
slider.on_changed(update)
plt.show()
Referências
O uso das seguintes funções, métodos, classes e módulos é mostrado neste exemplo: