python matplotlib在图像上指定位置加框的一些心得(深度学习图像标注可视化经常面临的问题)

matplotlib显示图像

  • 显示图像需要配合PIL库(python中pillow库)
  • 导入matplotlib.pyplot库
  • 导入matplotlib.patches库
# picdir是图片的路径
# 直接采用Image.open(picdir, 'r')的方法,没有关闭文件的方法,易导致内存泄漏
# 因此采用以下方法,通过二进制文件句柄的方式开和关闭

pf = open(picdir, 'rb')
img = Image.open(pf)
pf.close()

matplotlib在图像上添加标记框

# 注意这个方法是调用Patches在原图上绘制一个片
# facecolor设置为'none'可以使矩形框不填充颜色
# 坐标取的是左上角和宽度、高度
# patches添加的位置是轴句柄,而不是fig句柄

fig, ax1 = plt.subplots(1)
p = plt.imshow(img)
upleft = (x0, y0)
width = x1-x0
height = y1-y0
rect = patches.Rectangle(upleft, width, height, linewidth=0.3, edgecolor='r', facecolor='none')
ax1.add_patch(rect) 

matplotlib保存图像并去掉周边的空白

# 通过plt.gcf()选取前景,这样才能保证只绘制图像本身
# pad_inches设置为0
# bbox_inches设置为'tight'
# 提前将轴隐去

ax1.axis('off')
fig = plt.gcf()
fig.savefig(piccurrent+'.png', dpi=300, transparent=True, pad_inches=0, bbox_inches='tight')

matplotlib方法存在内存泄漏问题

  • imshow()这个方法总是在创建新的对象
  • 该对象没有办法自动关闭
  • 对大量图像进行循环操作时尤其需要注意这问题,内存是无法释放的
  • 针对这个问题,建议需要大量操作图像的用pillow自带的ImageDraw模块或者用cv模块来实现,matplotlib还是适用于少量的曲线绘制,数据呈现等。
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值