You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用imgaug库遇AttributeError:'FigureCanvasAgg'无set_window_title属性

问题

在MacOS笔记本上运行一段展示带边界框图片的代码时触发错误,错误源于imgaug库内部逻辑,该库通过conda-forge渠道安装。

运行代码

import imageio
import imgaug as ia
from imgaug.augmentables.bbs import BoundingBox, BoundingBoxesOnImage
%matplotlib inline
ia.seed(1)

image = imageio.imread("https://upload.wikimedia.org/wikipedia/commons/8/8e/Yellow-headed_caracara_%28Milvago_chimachima%29_on_capybara_%28Hydrochoeris_hydrochaeris%29.JPG")
image = ia.imresize_single_image(image, (298, 447))

bbs = BoundingBoxesOnImage([
    BoundingBox(x1=0.2*447, x2=0.85*447, y1=0.3*298, y2=0.95*298),
    BoundingBox(x1=0.4*447, x2=0.65*447, y1=0.1*298, y2=0.4*298)
], shape=image.shape)

ia.imshow(bbs.draw_on_image(image, size=2))

错误信息

AttributeError                            Traceback (most recent call last)
Cell In[1], line 15
      8 image = ia.imresize_single_image(image, (298, 447))
     10 bbs = BoundingBoxesOnImage([
     11     BoundingBox(x1=0.2*447, x2=0.85*447, y1=0.3*298, y2=0.95*298),
     12     BoundingBox(x1=0.4*447, x2=0.65*447, y1=0.1*298, y2=0.4*298)
     13 ], shape=image.shape)
---> 15 ia.imshow(bbs.draw_on_image(image, size=2))

File ~/miniconda3/envs/imgaug/lib/python3.11/site-packages/imgaug/imgaug.py:2120, in imshow(image, backend)
   2117 w = max(w, 6)
   2119 fig, ax = plt.subplots(figsize=(w, h), dpi=dpi)
-> 2120 fig.canvas.set_window_title("imgaug.imshow(%s)" % (image.shape,))
   2121 # cmap=gray is automatically only activate for grayscale images
   2122 ax.imshow(image, cmap="gray")

AttributeError: 'FigureCanvasAgg' object has no attribute 'set_window_title'
解决方案

错误根源是matplotlib的Agg后端不支持set_window_title方法,但imgaug的ia.imshow强制调用了该方法,以下是三种可行解决方式:

  • 替换为matplotlib原生显示方法:
    直接弃用ia.imshow,改用matplotlib的原生API展示图片,代码替换为:

    import matplotlib.pyplot as plt
    plt.imshow(bbs.draw_on_image(image, size=2))
    plt.show()
    

    这种方式绕开了imgaug的问题代码,适配所有matplotlib后端,尤其适合你使用的jupyter notebook环境(%matplotlib inline)。

  • 修改imgaug源码修复bug:
    找到imgaug.py文件(路径为错误信息中的~/miniconda3/envs/imgaug/lib/python3.11/site-packages/imgaug/imgaug.py),定位到第2120行,将该行代码替换为:

    fig.suptitle("imgaug.imshow(%s)" % (image.shape,))
    

    或者直接注释掉该行——因为在jupyter的inline模式下,窗口标题本就不会显示,不影响图片展示效果。

  • 切换matplotlib后端:
    在代码开头添加以下两行,切换到支持窗口标题的交互式后端(如TkAgg):

    import matplotlib
    matplotlib.use('TkAgg')
    

    注意:此方法需要你的MacOS已安装对应后端依赖(比如tkinter),若未安装需先通过conda或pip补充安装。

内容的提问来源于stack exchange,提问作者tomxor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 14:46:02