0

我正在开发一个使用 ipywidgets 和 bqplot 来显示图像并与之交互的项目。使用 ipywidgets 并打开 cv 我可以修改图像,保存它并更新小部件的值。但我还需要 bqplot 的 on_click_element 方面,所以我使用最后一个中的小部件。我仍然无法弄清楚如何使用 bqplot 中的小部件做同样的事情。

我想避免重绘洞的东西,但如果需要,它必须关闭并只重绘小部件图像,因为这是一组更大的小部件的一部分。例如,我想使用任意阈值对图像进行二值化。

从这里我得到了有关如何使用 bqplot 图像小部件的信息:https ://github.com/bqplot/bqplot/blob/master/examples/Marks/Object%20Model/Image.ipynb

我使用与此非常相似的东西来创建我显示的小部件。

from IPython.display import display
import ipywidgets as widgets
import bqplot as bq

with open('chelsea.png', 'rb') as f:
    raw_image = f.read()

ipyimage = widgets.Image(value=raw_image, format='png')
x_sc = bq.LinearScale()
y_sc = bq.LinearScale()
bq_image = bq.Image(image=ipyimage, scales={'x':x_sc, 'y':y_sc})
img_ani = bq.Figure(marks=[bq_image], animation_duration=400)
display(img_ani)

在此之后,我无法在不重新绘制孔的情况下更新图形。有任何想法吗?

jupyter 5.7.8,ipython 7.5.0,ipywidgets 7.5.1,bqplot 0.12.10

4

1 回答 1

1

通过分配新图像来更新 bqplot 图像标记....

with open("chelsea2.png", 'rb') as f:
    raw_image2 = f.read()

# ipyimage.value =  raw_image2  # This doesn't seems to sync with widget display. Would require a redisplay of bqplot figure

# create new ipywidgets image and assign it to bqplot image
ipyimage2 = widgets.Image(value=raw_image2, format='png')
bq_image.image = ipyimage2
于 2020-06-19T11:10:55.723 回答