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

pyplot绘制图像时TextBox输入坐标无法显示标记点问题求解

matplotlib TextBox提交坐标后无法绘制标记点修复

问题复现

功能目标:基于pyplot实现图像加载显示与交互标记,在显示的图像上叠加坐标点,点坐标通过TextBox控件输入提交。
异常表现:代码运行后可正常显示图像和底部输入框,但输入900,800格式的坐标按回车后,图像对应位置不会出现红色标记点。

原有问题代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import TextBox

def imshow_rgb(img_bgr):
    img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
    plt.imshow(img_rgb)

ims = cv2.imread('plattegrondtekening.png', 1)
fig = plt.imshow(np.flipud(ims), cmap='gray', origin='lower')
plt.subplots_adjust(bottom=0.2)

initial_text = ""
x,y=[500,500]

def submit(text):
    x,y = list(map(int,text.split(",")))
    print(x,y)
    plt.plot(x, y, "ro")
    plt.show()
    
axbox = plt.axes([0.1, 0.05, 0.8, 0.075])
text_box = TextBox(axbox, 'search', initial=initial_text)
text_box.on_submit(submit)

plt.show()

错误原因

  • 回调函数逻辑错误:submit是事件触发的回调函数,内部重复调用plt.show()会阻塞事件循环,新绘制的内容无法触发渲染
  • 缺少画布刷新步骤:matplotlib在交互控件回调中绘制新元素后,需要主动触发画布刷新才会显示新内容
  • 变量接收错误:原代码用fig接收plt.imshow()的返回值,实际该接口返回的是图像对象而非画布对象,后续无法正确操作画布
  • 图像显示异常:cv2默认读取为BGR格式,原代码未做色彩空间转换直接用灰度colormap显示,会出现色彩错乱

修复后代码

import cv2
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import TextBox

# 读取图像并转换为RGB格式
ims = cv2.imread('plattegrondtekening.png', 1)
img_rgb = cv2.cvtColor(ims, cv2.COLOR_BGR2RGB)

# 创建画布与绘图轴,预留底部控件空间
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.2)
# 显示翻转后的图像,匹配坐标原点方向
ax.imshow(np.flipud(img_rgb), origin='lower')

initial_text = ""

def submit(text):
    # 解析输入的x,y坐标
    x, y = list(map(int, text.split(",")))
    print(f"标记坐标:x={x}, y={y}")
    # 绘制红色标记点,设置点大小保证可见
    ax.plot(x, y, "ro", markersize=8)
    # 刷新画布,渲染新绘制的标记点
    fig.canvas.draw_idle()

# 初始化文本输入框
axbox = plt.axes([0.1, 0.05, 0.8, 0.075])
text_box = TextBox(axbox, '坐标输入(格式:x,y)', initial=initial_text)
text_box.on_submit(submit)

plt.show()

使用说明

  • 运行代码后正常加载图像与底部输入框
  • 输入数字,数字格式的坐标(例如900,800),按下回车键即可在图像对应位置生成红色标记点
  • 支持多次提交输入,可连续标记多个坐标点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 02:57:25